有没有办法根据配置文件包含自动配置? (如果有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
属性,但有时我想在" live"之间切换。和本地的h2数据库。我还可以确切地弄清楚排除的自动配置类正在做什么,并在" h2"中手动配置。但我不想重复工作。
任何人都有关于如何做到这一点的想法?
答案 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 {
}