多数据源使用spring test

正确做法:
1.基础Test类

@ContextConfiguration(locations={"classpath:applicationContext.xml"})
@TransactionConfiguration(defaultRollback=false)
public class TestBase extends AbstractTransactionalJUnit4SpringContextTests{

@Override
@Resource(name="gameDataSource")
public void setDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}

}

2.继承的类

@TransactionConfiguration(transactionManager="gameTransactionManager",defaultRollback=false)
public class MenuBoTest extends TestBase{

@Autowired
private MenuInfoBo menuInfoBo;

@Test
public void test(){
MenuInfo menuInfo=new MenuInfo();
menuInfo.setMenuName("本地游戏");
menuInfo.setMenuOpenType(1);
menuInfo.setMenuOrder(1);
menuInfoBo.add(menuInfo);
}

}

遇到的问题:
1.继承类MenuBoTest开始没有配注解@TransactionConfiguration
执行的时候会报错 显示No bean named 'transactionManager' is defined

源代码如下
private TransactionConfigurationAttributes retrieveTransactionConfigurationAttributes(Class<?> clazz) {
Class<TransactionConfiguration> annotationType = TransactionConfiguration.class;
TransactionConfiguration config = clazz.getAnnotation(annotationType);
if (logger.isDebugEnabled()) {
logger.debug("Retrieved @TransactionConfiguration [" + config + "] for test class [" + clazz + "]");
}

String transactionManagerName;
boolean defaultRollback;
if (config != null) {
transactionManagerName = config.transactionManager();
defaultRollback = config.defaultRollback();
}
else {
transactionManagerName = (String) AnnotationUtils.getDefaultValue(annotationType, "transactionManager");
defaultRollback = (Boolean) AnnotationUtils.getDefaultValue(annotationType, "defaultRollback");
}

TransactionConfigurationAttributes configAttributes =
new TransactionConfigurationAttributes(transactionManagerName, defaultRollback);
if (logger.isDebugEnabled()) {
logger.debug("Retrieved TransactionConfigurationAttributes [" + configAttributes + "] for class [" + clazz + "]");
}
return configAttributes;
}

执行的时候默认会加上事务,事务的bean是transactionManager,因为配置中没有这个bean所以会抛出这个异常。解决办法就是在继承类上加上注解@TransactionConfiguration(transactionManager="gameTransactionManager"),使用配置已经配过的这个gameTransactionManager。

2.经过上面的步骤测试又出现问题,可以查询但是不能进行增删改的操作,猜测原因可能是事务回滚造成的,所以在继承类加上defaultRollback=false,重新测试成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值