弹簧引导自动配置包括
问题描述:
有没有一种方法可以包含基于配置文件的自动配置? (这将是很好,如果有spring.autonfigure.include
)弹簧引导自动配置包括
我想连接到一个h2数据库进行测试和本地开发。为了便于开发,我希望DataSourceAutoConfiguration.class
,HibernateJpaAutoConfiguration.class
和DataSourceTransactionManagerAutoConfiguration.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”配置文件中手动配置,但我宁愿不重复努力。
任何人都有如何完成这个想法?
答
我能够通过拆分@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 {
}
您是否尝试过分离@ @ SpringBootApplication'并使用'@ Profile'注释了特定配置?你知道只要改变'spring.datasource.url'应该做你需要的吗? – chrylis
为什么在连接到oracle时需要禁用自动配置?只需提供一个'application-prod.properties'并在那里配置Oracle数据源。另外,如果您提供自己的实例,则不需要排除自动配置,Spring Boot足够智能以检测“DataSource”的存在并对其执行操作。但正如所说的,只是创建一个不同的'application.properties',并让spring启动根据配置文件决定加载哪一个。 –
我能够分离'@ SpringBootApplication'并使其正常工作。应用程序服务器(JBoss)配置数据源,因此我必须通过配置类来配置数据源。我需要禁用事务管理,因为我需要在连接到oracle时使用JBoss。 – greggnic