【发布时间】:2015-01-20 17:04:10
【问题描述】:
我有 2 个 MySQL 表:作业和摘要。
我正在尝试检查事务管理是否确实按预期工作:
下面是函数:
@Transactional("mysqlTransactionManager")
public void sumLicenseDayUsage(List<LicenseUsage> usages)
{
Job job = startJob();
calculateDailyUsage(usages);
updateJob(usages, job);
completeJob(job);
}
我确保 calculateDailyUsage() 会引发异常。这里的不同功能是使用 MyBatis 映射器来执行实际的 SQL 命令。
我希望当抛出异常时,作业表中不会存在任何行,尽管它们是在 startJob() 中创建的。仍然始终创建一行,并且从不回滚。
我想我是根据文档在书中使用它,但显然我一定遗漏了一些东西。
与我使用 MyBatis 的事实有什么关系吗?还是有 2 个表,因此有 2 个不同的映射器?从文档和各种测试来看,IT 看起来并不像它。
这是我的 XML 配置:
<tx:annotation-driven transaction-manager="mysqlTransactionManager"/>
<bean id="mysqlBuilder" class="com.company.project.mysqlutils.EmbeddedMysqlDatabaseBuilder">
<constructor-arg value="sql/create_sum_tables.sql"/>
</bean>
<bean id="billingDB" class="com.company.project.mysqlutils.EmbeddedMysqlDatabase" factory-bean="mysqlBuilder" factory-method="build"
destroy-method="shutdown"/>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="billingDB" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="billingDB" />
<property name="mapperLocations" value="classpath*:META-INF/mappers/mysql/**.xml" />
</bean>
<bean id="mysqlTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="billingDB" />
</bean>
<bean id="sumLicenseDayMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.company.project.sumtables.mappers.SumLicenseDayMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="jobsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.company.project.sumtables.mappers.JobsMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
提前谢谢
【问题讨论】:
标签: java mysql spring mybatis spring-jdbc