是否可以从自动配置中排除类
基于财产的价值?
就我而言,我想禁用
MailSenderAutoConfiguration
。
例如,
说我在app.email.disabled=true
中拥有application.properties
这个属性,
我想要这样的东西:
@SpringBootApplication
@EnableAutoConfiguration(exclude = MailSenderAutoConfiguration.class, ifProperty="app.email.disabled")
public class Application { .... }
我知道我可以声明JavaMailSender
类型的bean
并使用@ConditionalOnProperty
,
但我已经在中定义了所有电子邮件的属性
application.properties
和
我不想在课堂上再重复一遍。
答案 0 :(得分:2)
尽管有@ConditionalOnProperty
条注释,但您无法控制Spring Boot的MailSenderAutoConfiguration
。
您可以将spring.mail
属性移动到单独的application-mail.yaml
文件中。仅当Spring具有有效的mail
配置文件(例如@ActiveProfiles("mail")
)时,才会加载该文件。没有这个mail
配置文件,默认的MailSenderAutoConfiguration
将看不到它们。
答案 1 :(得分:0)
我为我的案子找到了解决方案,这不是最好的解决方案,但它可以工作。在MailSenderAutoConfiguration
类中有一个嵌套类:
**
* Condition to trigger the creation of a {@link JavaMailSenderImpl}. This kicks in if
* either the host or jndi name property is set.
*/
static class MailSenderCondition extends AnyNestedCondition {...}
所以我只评论了spring.mail.host
属性,当我需要发送电子邮件时,我将不对其进行注释。这不是最好的解决方案,因为我相信有一天我会忘记对其取消注释。
在我的情况下,此解决方案有效,但对于一般需求(任何自动配置),它将不起作用。我希望在下一个Spring Boot版本中可以看到此功能。
答案 2 :(得分:0)
我在JmsAutoConfiguration中有类似的案例,而我所做的是:
@EnableAutoConfiguration(exclude = {ActiveMQAutoConfiguration.class,JmsAutoConfiguration.class})
@Configuration
@ConditionalOnProperty("application.queue.enabled")
@EnableJms
@ImportAutoConfiguration({ActiveMQAutoConfiguration.class,JmsAutoConfiguration.class})
public class JmsConfiguration {
...
希望有帮助。