是否可以根据属性的值从自动配置中排除一个类?在我的例子中,我想禁用MailSenderAutoConfiguration
。例如,假设我在application.properties
中有这个属性app.email.disabled=true
,我想这样做:
@SpringBootApplication
@EnableAutoConfiguration(exclude = MailSenderAutoConfiguration.class, ifProperty="app.email.disabled")
public class Application { .... }
我知道我可以声明JavaMailSender
类型的bean并使用@ConditionalOnProperty
,但是我已经在application.properties
中定义了email的所有属性,我不想在类中重复它们。
4条答案
按热度按时间cs7cruho1#
尽管有
@ConditionalOnProperty
注解,但您无法控制Sping Boot 的MailSenderAutoConfiguration
。您可以将
spring.mail
属性移到一个单独的application-mail.yaml
文件中。只有当Spring有一个活动的mail
配置文件(例如@ActiveProfiles("mail")
)时,它才会被加载。没有这个mail
配置文件,默认的MailSenderAutoConfiguration
将看不到它们。q7solyqu2#
我有类似的JmsAutoConfiguration案例,我所做的是:
1.在主SpringBoot类中排除:
1.创建单独的配置类:
希望能有所帮助。
k4ymrczo3#
我为我的情况找到了一个解决方案,这不是最好的解决方案,但它是有效的。在
MailSenderAutoConfiguration
类中有这样一个嵌套类:所以我只是注解了
spring.mail.host
属性,当我需要发送电子邮件时,我会取消注解它。这不是最好的解决方案,因为我相信有一天我会忘记取消注解它。这个解决方案在我的情况下工作,但对于一般需要(任何自动配置),它不会工作。我希望在下一个Sping Boot 版本中看到这个功能。tjjdgumg4#
要按属性禁用自动配置,您可以创建如下所示的排除器配置;