1. 配置事务spring-datasource-jdbc.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"
default-autowire="byName">
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/sampledb"></property>
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="maxActive" value="${dbcp.maxActive}"></property>
<property name="maxIdle" value="${dbcp.maxIdle}"></property>
<property name="minIdle" value="${dbcp.minIdle}"></property>
<property name="maxWait" value="${dbcp.maxWait}"></property>
<property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}"></property>
<property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}"></property>
<property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}"></property>
</bean>
<bean id="jdbcTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds" />
</bean>
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
<property name="transactionManager" ref="jdbcTransactionManager" />
<property name="isolationLevelName" value="ISOLATION_READ_COMMITTED" />
<property name="timeout" value="30" />
</bean>
</beans>
2.使用事务:
public class MyTriggerJob {
@Autowired
private TransactionTemplate transactionTemplate;
@Autowired
private UserDao userDao;
public void execute() {
//System.out.println("quartz test");
transactionTemplate.execute(new TransactionCallback<Boolean>() {
public Boolean doInTransaction(TransactionStatus status) {
// TODO Auto-generated method stub
try {
UserDO user = new UserDO();
user.setName("aa");
user.setPassword("123");
userDao.insert(user);
System.out.println("aa insert success");
int i = 1 / 0;
UserDO user1 = new UserDO();
user1.setName("bb");
user1.setPassword("456");
userDao.insert(user1);
System.out.println("bb insert success");
}catch(Exception e) {
throw new RuntimeException(e);
}
return true;
}
});
}
}
1/0抛出异常,所以以前的操作会回滚。注:异常需要throw,这样才会被execute方法捕获回滚。如果不throw不会触发回滚。