package com.sise.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; public class ConnectionUtils { private ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); private DataSource dataSource; public Connection getThreadConnection() { Connection conn = tl.get(); if (conn == null) { try { conn = dataSource.getConnection(); tl.set(conn); } catch (SQLException e) { e.printStackTrace(); } } return conn; } public void setDataSource(DataSource dataSource) { this.dataSource = dataSource; } public void CloseTranaction() { tl.remove(); } }
下面就是事务管理的写法
package com.sise.utils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.sql.SQLException; public class TransactionManager { private ConnectionUtils connectionUtils; public void setConnectionUtils(ConnectionUtils connectionUtils) { this.connectionUtils = connectionUtils; } /* * 开启事务,不让他自动提交 * * */ public void beginTransaction() { try { connectionUtils.getThreadConnection().setAutoCommit(false); } catch (SQLException e) { e.printStackTrace(); } } /* * 提交事务 * * */ public void commitTransaction() { try { connectionUtils.getThreadConnection().commit(); } catch (SQLException e) { e.printStackTrace(); } } /* * 回滚事务,不让他自动提交 * * */ public void rollbackTransaction() { try { connectionUtils.getThreadConnection().rollback(); } catch (SQLException e) { e.printStackTrace(); } } /* * 释放链接,和解绑事务,使链接不绑定着事务,让下次可以用 * * */ public void release() { try { connectionUtils.getThreadConnection().close(); connectionUtils.CloseTranaction(); } catch (SQLException e) { e.printStackTrace(); } } }
同时再daoImpl的数据库语句中必须加入:connectionUtils.getThreadConnection()
return runner.query(connectionUtils.getThreadConnection(),"select * from mybatisacount", new BeanListHandler<AcountBean>(AcountBean.class));再xml配置文件中去掉
<!--注入数据源-->
<!-- 这个1语句:<constructor-arg name="ds" ref="dataSource"></constructor-arg>-->
<!-- 如果想线程和连接绑定,则需要再daoImpl里面的sql语句前面添加connectionUtils.getThreadConnection(),
return runner.query(connectionUtils.getThreadConnection(),"select * from mybatisacount"
, new BeanListHandler<AcountBean>(AcountBean.class));
而且要注掉这个1语句:<constructor-arg name="ds" ref="dataSource"></constructor-arg>
这个语句不注掉,就会创建多个连接,使事务不能使用
-->
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解 fmvvvteih...