Spring 编程式事务管理实现
Spring 支持事务管理,有两种方式,编程式事务管理和声明式事务管理,下面介绍编程式事务管理。
编程式事务管理实现步骤:
1.在spring 配置文件中声明数据源
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://xxx.xx.xx:3306/mytest?useSSL=false&serverTimezone=Asia/Shanghai"></property>
<property name="username" value="root"></property>
<property name="password" value="********"></property>
</bean>
2.在spring 配置文件中声明事务管理类
<bean id="transcationManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
使用原生的jdbc 操作,这样当中间出现异常的时候,数据会出现相应的回滚,需要注意的是这里需要设置:conn.setAutoCommit(false);
@Override
public void tranfMoeny(String money, String fromname, String targetName) {
TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务
TransactionStatus tstatus = transcationManager.getTransaction(define);//
Connection conn = null;
try {
conn = this.dataSource.getConnection();
conn.setAutoCommit(false);
Statement ment = conn.createStatement();
String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";
ment.execute(sql_sub);
Integer.parseInt("jjf");
String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";
ment.execute(sql_add);
transcationManager.commit(tstatus);
} catch (Exception e) {
transcationManager.rollback(tstatus);
e.printStackTrace();
}
}
不用原生的jdbc ,使用jdbcTemplate 进行事务操作,需要在配置文件中首先配置jdbc模板
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
下面使用jdbcTemplate来进行实现:
@Override
public void tranfMoeny(String money, String fromname, String targetName) {
TransactionDefinition define = new DefaultTransactionDefinition();// 初始化事务
TransactionStatus tstatus = transcationManager.getTransaction(define);//
try {
String sql_sub = "update t_account set money=money-" + money + " where username=\'" + fromname + "\'";
jdbcTemplate.execute(sql_sub);
Integer.parseInt("jjf");
String sql_add = "update t_account set money=money+" + money + " where username=\'" + targetName + "\'";
jdbcTemplate.execute(sql_add);
transcationManager.commit(tstatus);
} catch (Exception e) {
transcationManager.rollback(tstatus);
e.printStackTrace();
}
}
上面就是通过代码实现Spring 的编程式事务管理,分为使用jdbcTemplate和不使用jdbcTemplate 两种方式,
希望对你有所帮助!