Java 从错误的@Configuration文件加载Spring@PropertySource
我有两个配置文件。一个用于构建(AppConfig),一个用于测试(TestAppConfig) AppConfig:Java 从错误的@Configuration文件加载Spring@PropertySource,java,spring,Java,Spring,我有两个配置文件。一个用于构建(AppConfig),一个用于测试(TestAppConfig) AppConfig: @Configuration @Import(HttpConfig.class) @EnableTransactionManagement @PropertySource(name = "props", value = { "file:app.properties" }) public class AppConfig { @Configuration @Import(Http
@Configuration
@Import(HttpConfig.class)
@EnableTransactionManagement
@PropertySource(name = "props", value = { "file:app.properties" })
public class AppConfig {
@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();
}
}
TestAppConfig:
@Configuration
@Import(HttpConfig.class)
@EnableTransactionManagement
@PropertySource(name = "props", value = { "file:app.properties" })
public class AppConfig {
@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
如果我进行构建,它将使用正确的属性正确运行。根据我们掌握的详细信息,我认为问题可能就在这里
@ComponentScan(basePackages = "package")
在TestAppConfig
类中
如果您的
AppConfig
类位于该包中的某个位置,则执行组件扫描将为其创建一个bean(因为@Configuration
),尝试加载它找不到的属性文件。对你的@组件扫描包要更加具体/专用。你的HttpConfig
有什么功能吗?没有,它只是用@Configuration
注释并声明了一个bean。你必须在TestAppConfig
中找到试图打开文件的东西。我建议你发布更多的上下文。或者尝试清理和重建。我已经添加了完整的TestAppConfig,但我认为它没有任何价值。哈哈,有些人可能不知道。谢谢,我想这可能就是答案。我将稍微修改一下我的包结构。