我有以下课程来实例化正确的管理器,因此我可以将其用于登台,发布以及用于测试:
public class DAOFactory {
private static final Logger LOG = LoggerFactory.getLogger(DAOFactory.class);
@Autowired
private static ApplicationContext applicationContext;
private final static String dataSourceName = "remoteStagingDataSource";
// TODO : Change variable dataSourceName to the correct DataSource if you deploy on staging/release web server
// -- remoteStagingDataSource -- for deploying on local tomcat server
// -- stagingDataSource -- for deploying on staging server + uncomment the correct bean in src/main/resources/applicationContext.xml
// -- releaseDataSource -- for deploying on release server + uncomment the correct bean in src/main/resources/applicationContext.xml
public static DAOManager createMySQLDAOManager() {
LOG.info("Setting up datasource to " + dataSourceName);
DataSource dataSource = setupDataSource(dataSourceName);
return new DAOManager(dataSource);
}
public static DAOManager createHSQLDBDAOManager() {
LOG.info("Setting up datasource to in-memory HSQLDB");
DataSource dataSource = setupDataSource("hsqldbDataSource");
return new DAOManager(dataSource);
}
private static DataSource setupDataSource(final String dataSourceName) {
applicationContext = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
return (DataSource)applicationContext.getBean(dataSourceName);
}
}
现在,我想将
applicationContext
分开进行测试(DBUnit
测试我的DAO
)所以两个xml文件:
applicationContext.xml
applicationContext-test.xml
知道我该如何做到吗?
最佳答案
Spring提供了Profiles,它允许在运行时根据应用程序所驻留的环境有条件地选择bean实例。
简而言之,您可以使用beans
标签包装与环境相关的bean,该标签将profile
定义为属性:
<beans profile="DEV">
<bean id="someBean" class="x.y.ClassA"/>
<beans>
<beans profile="QA">
<bean id="someBean" class="x.y.ClassB"/>
<beans>
然后设置系统属性以确定要运行的环境:
-Dspring.profiles.active="QA"