I want to externalize the @SpringBootApplication(exclude...)
option, to have a reusable class or annotation that I could throw in to exclude any database/hibernate initialization.
So, instead of writing:
@SpringBootApplication(
exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class})
public class MainApp {
}
I would like to create a annotation that I could apply to my @SpringBootApplication
main class:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@EnableAutoConfiguration(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class})
@Configuration
public @interface ExcludeDataSources {
}
And then enable this feature by annotation:
@SpringBootApplication
@ExcludeDataSources
public class MainApp {
}
Problem: the annotation approach does not work, and spring still tries to load a database. Why?
My final goal is to have multiple profiles, where only one loads the database.
I could manage it by adding an additional @EnableAutoConfiguration
that is only executed on a certain condition. This way I can dynamically exclude the database config, while keeping a clean basis main @SpringBootConfiguration
class.
public class DataSourceConfig {
@Configuration
@Conditional(MyCondition.class)
@EnableAutoConfiguration(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
HibernateJpaAutoConfiguration.class})
static class ExcludeDataSource {
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.