【问题标题】:Spring Boot conditonally enable DataSourceAutoConfiguration based on system propertySpring Boot 有条件地根据系统属性启用 DataSourceAutoConfiguration
【发布时间】:2016-04-20 00:19:52
【问题描述】:

我的项目中有以下依赖项,并且我的主类中有 @SpringBootApplication spring-boot-starter-data-jpa
有没有什么方法可以仅在存在 Env 属性/系统属性时有条件地启用 Spring Boot 数据源自动配置类。

谢谢

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    看来,如果你定义属性“spring.datasource.initialize”为false,初始化逻辑会被跳过。

    如果您查看 DataSourceAutoConfiguration 定义,它会加载到配置属性中...

    DataSourceProperties 有一个名为“initialize”的属性,它似乎在 DataSourceInitializer 默认实现中被引用...

    我认为可以使用属性来跳过数据源初始化。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      用注解@ConditionalOnProperty 扩展DataSourceAutoConfiguration 怎么样?您可以从 spring 中排除原始的 DataSourceAutoConfiguration 并将您自己的实现作为应用程序的一部分。比如,

      @Configuration
      @ConditiaonalOnProperty(value = "datasource.property.anything",matccchIfMissing==true)
      public class DataSourceInit extends DataSourceAutoConfiguartion {
      }
      

      在你的 spring 应用程序类中添加 exclude 为:

      @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
      

      【讨论】:

      • 嗨双子座,谢谢。当 datasource.property.anything 设置为 true 时,我能够成功启动应用程序......但是当它关​​闭(设置为 false)时,加载 HibernateJpaAutoConfiguration 类时失败。我回来并添加了@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})。现在它在设置为 false 时工作,但在设置为 true 时失败。
      • 在不想开启DataSourceAutoConfiguration的情况下,排除全部肯定没问题。如果您的datasource.property.anything 设置为false,会发生什么故障?根据我的经验,@ConditionalOnProperty 将决定是否应该加载类 HibernateJpaAutoConfiguration。否则,请将您的项目发布到 github 还是直接邮寄给我?我想对它做更多的研究。如果我实现了,我将发布任何有用的信息。
      【解决方案3】:

      您可以使用spring.autoconfigure.exclude 属性排除自动配置。您可以使用系统属性设置该属性:

      -Dspring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
      

      您也可以使用SPRING_AUTOCONFIGURE_EXCLUDE 环境变量来设置它。

      【讨论】:

        猜你喜欢
        • 2019-10-02
        • 1970-01-01
        • 2014-12-21
        • 2017-09-07
        • 2015-03-18
        • 2014-06-09
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多