したがって、構成クラスの 1 つに (Testing/Production)DatabaseConfig クラスの両方が含まれており、アクティブなプロファイルによって適切なクラスが選択されます。しかし、DatabaseConfig クラスが実行されると、dataSource ivar が null になります。
デバッグを行いました。TestingDatabaseConfig の dataSource() メソッドは、DatabaseConfig の localContainerEntityManagerFactoryBean() が実行される前に実行されます。
私の質問は、なぜこれが機能しないのか、機能するはずなのか、何が間違っているのかということだと思います。
@Configuration
@Profile({"testing-db", "production-db"})
@Import({TestingDatabaseConfig.class, ProductionDatabaseConfig.class})
@EnableTransactionManagement
public class DatabaseConfig
{
@Resource
private DataSource dataSource;
@Bean(name = "entityManager")
public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean()
{
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(this.dataSource);
// other config
return entityManagerFactoryBean;
}
// ... other db related beans stuff ...
}
@Configuration
@Profile("testing-db")
public class TestingDatabaseConfig implements DatabaseConfigInterface
{
@Bean(name="dataSource")
public DataSource dataSource()
{
JDBCDataSource dataSource = new JDBCDataSource();
dataSource.setDatabase("jdbc:hsqldb:mem:testing");
dataSource.setUser("sa");
return dataSource;
}
}