我想为运行unitTest提供不同的数据库,而不是使用默认的生产数据库。我想过用profile来解决这个问题。 这是spring4启动项目,因此所有内容都有注释。 这就是我在做的事情:
在src / main / resources下,我放了application.properties
:
spring.datasource.url=jdbc:postgresql://localhost:5432/services
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.datasource.driver-class-name=org.postgresql.Driver
在src / test / resources下,我放了application-test.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/services_test
spring.datasource.username=postgres
spring.datasource.password=Hercules1
spring.datasource.driver-class-name=org.postgresql.Driver
然后,我在测试之前放了@ActiveProfiles("test")
,现在当我运行单元测试时,我立即遇到了这个错误:
java.lang.IllegalStateException:无法加载ApplicationContext
我搜索了很多内容,没有任何东西可以解决这个错误。
你能指出我的解决方案有什么问题吗?
由于
答案 0 :(得分:-2)
将-test
添加到application.properties
后,不会使属性成为您激活的配置文件的候选对象。您需要执行以下操作:
数据源配置界面:
public interface DatasourceConfig {
public void setup();
}
测试数据源配置:
@Component
@Profile("test")
public class ProductionDatasourceConfig implements DatasourceConfig {
@Override
public void setup() {
// Set up your test datasource
}
}
生产数据源配置:
@Component
@Profile("prod")
public class ProductionDatasourceConfig implements DatasourceConfig {
@Override
public void setup() {
// Set up your prod datasource
}
}
激活个人资料:
@ActiveProfiles("test")
根据环境注入数据源:
@Autowired
DatasourceConfig datasourceConfig;
以XML格式声明的Bean也可以映射到配置文件,如下所示:
<beans profile="dev">
<bean id="devDatasourceConfig" class="org.profiles.DevDatasourceConfig" />
</beans>
<beans profile="prod">
<bean id="productionDatasourceConfig" class="org.profiles.ProductionDatasourceConfig" />
</beans>