问题
由于项目中配置的多数据源是动态,在service层的类上或方法上设置了注解,如@DataSource
正常项目运行时可以使用的。但是单元测试时虽然进入了切面,默认运行的还是配置中设置的默认数据源,并没有切换数据源
bean.xml
<!--统一的dataSource--> <bean id="dynamicDataSource" class="com.lemo.rms.config.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <!--通过不同的key决定用哪个dataSource--> <entry value-ref="face" key="face"/> <entry value-ref="admin" key="admin"/> </map> </property> <!--设置默认的dataSource--> <property name="defaultTargetDataSource" ref="admin"/> </bean>
配置setDataSource,但是单元测试时所设置的无用,只是指定bean不报错
单元测试基类-admin
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:context.xml"}) @ActiveProfiles("devlopment") public abstract class BaseRunner extends AbstractTransactionalJUnit4SpringContextTests { /** * 配置admin数据源 * * @param dataSource 数据源 * @return void * @author 杨小华 * @date 2018/1/22 9:43 * @since 1.0.0 */ @Override @Resource(name = "admin") public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); }
单元测试基类-face
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:config-test.xml","classpath:context.xml"}) @ActiveProfiles("devlopment") public abstract class FaceBaseRunner extends AbstractTransactionalJUnit4SpringContextTests { /** * 配置face数据源 * * @param dataSource 数据源 * @return void * @author 杨小华 * @date 2018/1/22 9:43 * @since 1.0.0 */ @Override @Resource(name = "face") public void setDataSource(DataSource dataSource) { super.setDataSource(dataSource); } }
解决
1.新建了一个config-test.xml,配置默认数据源为face,原来的config.xml的默认数据源为admin
config-test.xml 主要代码
<!--统一的dataSource--> <bean id="dynamicDataSource" class="com.lemo.rms.config.DynamicDataSource"> <property name="targetDataSources"> <map key-type="java.lang.String"> <!--通过不同的key决定用哪个dataSource--> <entry value-ref="face" key="face"/> <entry value-ref="admin" key="admin"/> </map> </property> <!--设置默认的dataSource--> <property name="defaultTargetDataSource" ref="face"/> </bean>
2.在FaceBaseRunner中多引入一个配置文件,"classpath:config-test.xml"