2 つの構成ファイルがあります。1 つはビルド用 (AppConfig) で、もう 1 つはテスト用 (TestAppConfig) です。
AppConfig:
@Configuration
@Import(HttpConfig.class)
@EnableTransactionManagement
@PropertySource(name = "props", value = { "file:app.properties" })
public class AppConfig {
TestAppConfig:
@Configuration
@Import(HttpConfig.class)
@EnableJpaRepositories("repository")
@ComponentScan(basePackages = "package")
@EnableTransactionManagement
@PropertySource(name = "props", value = { "classpath:test_app.properties" })
public class TestAppConfig {
public static final String DB_NAME = "testdb";
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.HSQL)
.addScript("import_test.sql").setName(DB_NAME).build();
}
@Bean
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(dataSource());
factory.setPersistenceUnitName(DB_NAME);
factory.setPackagesToScan("domain");
factory.setJpaVendorAdapter(jpaAdapter());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public JpaVendorAdapter jpaAdapter() {
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabase(Database.HSQL);
return adapter;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory());
}
@Bean
public HibernateExceptionTranslator exceptionTranslator() {
return new HibernateExceptionTranslator();
}
}
完全を期すための HttpConfig:
@Configuration
public class HttpConfig {
テストを実行すると、次のように注釈が付けられます。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = TestAppConfig.class)
public class MyTest {
エラーが発生します:
Failed to load bean class: TestAppConfig; nested exception is java.io.FileNotFoundException: app.properties (No such file or directory)
app.properties をプルしようとするのはなぜですか? test_app.properties を使用するように指定しました。
ビルドを行うと、適切なプロパティで正しく実行されます。