spring boot autoconfiguration包括

时间:2017-06-13 19:27:11

标签: java spring-boot

有没有办法根据配置文件包含自动配置? (如果有spring.autonfigure.include

会很好

我想连接到h2数据库进行测试和本地开发。为了便于开发,我希望DataSourceAutoConfiguration.classHibernateJpaAutoConfiguration.classDataSourceTransactionManagerAutoConfiguration.class自动配置。但是,我希望能够轻松切换到在应用程序服务器中定义并在Configuration类中配置的oracle数据库。切换到oracle数据库时,我需要排除上面的自动配置类:

// This only works for the oracle database - need to include autoconfig
// classes for h2 database
@SpringBootApplication(
     exclude = {
       DataSourceAutoConfiguration.class,
       HibernateJpaAutoConfiguration.class,
       DataSourceTransactionManagerAutoConfiguration.class },
     scanBasePackages = {
       "foo.bar"
     })

我有一个" h2"配置h2数据库的配置文件以及我想要实时数据库的其他几个配置文件(本地,开发,测试,质量,产品)。我可以在每个实时数据库配置文件中使用spring.autoconfigure.exclude属性,但有时我想在" live"之间切换。和本地的h2数据库。我还可以确切地弄清楚排除的自动配置类正在做什么,并在" h2"中手动配置。但我不想重复工作。

任何人都有关于如何做到这一点的想法?

1 个答案:

答案 0 :(得分:0)

我能够通过拆分@SpringBootApplication注释并提供特定的@EnableAutoConfiguration注释来实现此目的。

@Configuration
@ComponentScan(basePackages = {"foo.bar"})
@EnableTransactionManagement
@EnableConfigurationProperties
public class App extends SpringBootServletInitializer {
    public static void main(String... args) throws Exception {
        SpringApplication.run(App.class, args);
    }
}

对于h2数据库,我启用" h2"个人资料并使用此课程:

@Profile("h2")
@Configuration
@EnableAutoConfiguration
public class H2Config {
    @Bean
    public ServletRegistrationBean h2servletRegistration() {
        ServletRegistrationBean registration = new ServletRegistrationBean(new WebServlet());
        registration.addUrlMappings("/console/*");
        return registration;
    }
}

对于" live" oracle数据库,我禁用" h2"个人资料并使用此课程:

@Profile("!h2")
@Configuration
@EnableAutoConfiguration(exclude = {
        DataSourceAutoConfiguration.class,
        HibernateJpaAutoConfiguration.class,
        DataSourceTransactionManagerAutoConfiguration.class })
public class NonH2Config {

}