Spring Boot@EnableAutoConfiguration根据属性有条件地排除类
是否可以从自动配置中排除类 基于财产的价值? 在我的情况下,我想禁用, 在某些情况下,Spring Boot@EnableAutoConfiguration根据属性有条件地排除类,spring,spring-boot,spring-messaging,Spring,Spring Boot,Spring Messaging,是否可以从自动配置中排除类 基于财产的价值? 在我的情况下,我想禁用, 在某些情况下,MailSenderAutoConfiguration。 例如 假设我在我的application.properties中有此属性app.email.disabled=true, 我想要这样的东西: @SpringBootApplication @EnableAutoConfiguration(exclude = MailSenderAutoConfiguration.class, ifProperty="ap
MailSenderAutoConfiguration
。
例如
假设我在我的application.properties
中有此属性app.email.disabled=true
,
我想要这样的东西:
@SpringBootApplication
@EnableAutoConfiguration(exclude = MailSenderAutoConfiguration.class, ifProperty="app.email.disabled")
public class Application { .... }
我知道我可以声明类型为JavaMailSender
并使用@ConditionalOnProperty
,
但我已经在中定义了所有电子邮件的属性
application.properties
和
我不想在类中重复它们。尽管有注释,但您无法控制Spring Boot的MailSenderAutoConfiguration
您可以将
spring.mail
属性移动到一个单独的应用程序mail.yaml
文件中。仅当Spring具有活动的邮件
配置文件(例如@ActiveProfiles(“邮件”)
)时,才会加载它。如果没有此邮件
配置文件,默认的邮件发送自动配置
将看不到它们。我为我的案例找到了一个解决方案,这不是最好的解决方案,但很有效。在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引导版本上看到此功能。我与JmsAutoConfiguration有类似的情况,我所做的是:
希望能有所帮助。这在我的情况下不起作用,因为我有许多属性文件,它们是根据活动配置文件启用的。如果我添加新的属性文件,我的应用程序将崩溃。除了声明我自己的bean,我没有其他选择。我快速查看了
MailSenderAutoConfiguration
的代码,我完全可以控制Spring Boot创建的bean,因为它的属性基于application.properties中定义的属性。@akuma8如果为非活动配置文件添加新属性文件会使你的应用程序崩溃,那么你就有一个bug。问题是当配置文件崩溃时将处于活动状态,因为在我的应用程序中我有以下内容:@PropertySource(value={“classpath:securityservice/security-${spring.profiles.active}.properties”})
因此当邮件
配置文件处于活动状态时,将找不到文件安全邮件.properties
@EnableAutoConfiguration(exclude = {ActiveMQAutoConfiguration.class,JmsAutoConfiguration.class})
@Configuration
@ConditionalOnProperty("application.queue.enabled")
@EnableJms
@ImportAutoConfiguration({ActiveMQAutoConfiguration.class,JmsAutoConfiguration.class})
public class JmsConfiguration {
...