我有以下课程来实例化正确的管理器,因此我可以将其用于登台,发布以及用于测试:

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"

10-07 19:44
查看更多