2017-06-13 199 views
2

有没有一种方法可以包含基于配置文件的自动配置? (这将是很好,如果有spring.autonfigure.include弹簧引导自动配置包括

我想连接到一个h2数据库进行测试和本地开发。为了便于开发,我希望DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.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属性,但有时我想在本地“实时”和h2数据库之间切换。我也可以弄清楚被排除的自动配置类正在做什么,并在“h2”配置文件中手动配置,但我宁愿不重复努力。

任何人都有如何完成这个想法?

+0

您是否尝试过分离@ @ SpringBootApplication'并使用'@ Profile'注释了特定配置?你知道只要改变'spring.datasource.url'应该做你需要的吗? – chrylis

+0

为什么在连接到oracle时需要禁用自动配置?只需提供一个'application-prod.properties'并在那里配置Oracle数据源。另外,如果您提供自己的实例,则不需要排除自动配置,Spring Boot足够智能以检测“DataSource”的存在并对其执行操作。但正如所说的,只是创建一个不同的'application.properties',并让spring启动根据配置文件决定加载哪一个。 –

+0

我能够分离'@ SpringBootApplication'并使其正常工作。应用程序服务器(JBoss)配置数据源,因此我必须通过配置类来配置数据源。我需要禁用事务管理,因为我需要在连接到oracle时使用JBoss。 – greggnic

回答

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; 
    } 
} 

,并为“活的” Oracle数据库,我禁用“H2”的个人资料,并使用此等级:

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

}