In meiner Spring-Anwendung habe ich eine Haupt @Configuration
Klasse namens, sagen wir ConfigApplication
. Ich habe auch einige profilbasierte Konfigurationsklassen, ConfigDev
und ConfigProd
. Die Situation wird wieder aufgenommen, wie folgend:Spring Java Config Bean Definition überschreiben
@Configuration
@ComponentScan("fr.gf.predication.*")
@Import(value = ConfigSecurity.class)
@PropertySource("classpath:configuration/default.properties")
public class ConfigApplication {
@Bean
public JpaTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
return transactionManager;
}
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
entityManagerFactoryBean.setJpaVendorAdapter(vendorAdapter);
entityManagerFactoryBean.setPackagesToScan(MODEL_PACKAGE);
entityManagerFactoryBean.setDataSource(dataSource());
entityManagerFactoryBean.setJpaProperties(loadHibernateConfiguration());
return entityManagerFactoryBean;
}
}
Wenn ich wählen Sie die dataSource
Bean Definition zu bewegen, um eine bestimmte Konfiguration zu haben (mit und ohne Verbindungspool zum Beispiel) zwischen meinen Umgebungen, werde ich alle anderen Bohnen Definition duplizieren müssen (entityManagerFactory
, transactionManager
), weil sie die DataSource-Bean benötigen.
Ich habe versucht, diese Bohne Definition in meiner ConfigProd
Klasse außer Kraft zu setzen, aber es scheint von Spring ignoriert werden, bis es bereits die Bean in der Hauptkonfigurations Klasse geladen ist ...
Gibt es eine Möglichkeit, diese umgebungsspezifischen zu erreichen Aufbau? Oder sollte ich das Design dieser Klassen überdenken?