Java web----Service事务SrcCode

来源:互联网 发布:go web编程 pdf 完整版 编辑:程序博客网 时间:2024/06/15 10:37

<?xml version="1.0" encoding="UTF-8"?><c3p0-config><!-- 这是默认配置信息 --><default-config> <!-- 连接四大参数配置 --><property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">123</property><!-- 池参数配置 --><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</property><property name="maxPoolSize">10</property></default-config><!-- 专门为oracle提供的配置信息 --><named-config name="oracle-config"> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="user">root</property><property name="password">123</property><property name="acquireIncrement">3</property><property name="initialPoolSize">10</property><property name="minPoolSize">2</property><property name="maxPoolSize">10</property></named-config></c3p0-config>

package com.cug.jdbc;import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JdbcUtils {private static ComboPooledDataSource dataSource = new ComboPooledDataSource();private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();public static Connection getConnection() throws SQLException{Connection conn1 = tl.get();if(conn1 != null)return conn1;return dataSource.getConnection();}public static DataSource getDataSource(){return dataSource;}public static void beginTransaction() throws SQLException{Connection conn1 = tl.get();if(conn1 != null)throw new RuntimeException("您已经开启了事务,不用重复开启");conn1 = getConnection();conn1.setAutoCommit(false);tl.set(conn1);}public static void commitTransaction() throws SQLException{Connection conn1 = tl.get();if(conn1 == null)throw new RuntimeException("您还没有开启事务,不能提交");conn1.commit();conn1.close();tl.remove();}public static void rollbackTransaction() throws SQLException{Connection conn1 = tl.get();if(conn1 == null)throw new RuntimeException("没有事务可以回滚");conn1.rollback();conn1.close();tl.remove();}public static void releaseConnection(Connection connect) throws SQLException{Connection conn1 = tl.get();if(conn1 == null)connect.close();if(conn1 != connect)connect.close();}}

package com.cug.jdbc;import java.sql.Connection;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.ResultSetHandler;public class TxQueryRunner extends QueryRunner{@Overridepublic int[] batch(String sql, Object[][] params) throws SQLException {Connection conn = JdbcUtils.getConnection();int[] result = super.batch(conn, sql, params);JdbcUtils.releaseConnection(conn);return result;}@Overridepublic <T> T query(String sql, ResultSetHandler<T> rsh, Object... params)throws SQLException {Connection conn = JdbcUtils.getConnection();T result = super.query(conn, sql, rsh, params);JdbcUtils.releaseConnection(conn);return result;}@Overridepublic <T> T query(String sql, ResultSetHandler<T> rsh) throws SQLException {Connection conn = JdbcUtils.getConnection();T result = super.query(conn, sql, rsh);JdbcUtils.releaseConnection(conn);return result;}@Overridepublic int update(String sql) throws SQLException {Connection conn = JdbcUtils.getConnection();int result = super.update(conn, sql);JdbcUtils.releaseConnection(conn);return result;}@Overridepublic int update(String sql, Object param) throws SQLException {Connection conn = JdbcUtils.getConnection();int result = super.update(conn, sql, param);JdbcUtils.releaseConnection(conn);return result;}@Overridepublic int update(String sql, Object... params) throws SQLException {Connection conn = JdbcUtils.getConnection();int result = super.update(conn, sql, params);JdbcUtils.releaseConnection(conn);return result;}}

package com.cug.jdbc;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;public class AccountDao {public static void update(String name, double money) throws SQLException{QueryRunner qr = new TxQueryRunner();String sql = "update account set balance=balance+? where name=?";Object[] params = {money, name};qr.update(sql, params);}}

package com.cug.jdbc;import java.sql.SQLException;import org.junit.Test;public class Demo01 {private AccountDao dao = new AccountDao();@Testpublic void serviceMethod() throws SQLException{try {JdbcUtils.beginTransaction();dao.update("ls",-1000);if(true)throw new RuntimeException("dd");dao.update("ww",1000);JdbcUtils.commitTransaction();} catch (SQLException e) {try {JdbcUtils.rollbackTransaction();} catch (SQLException e1) {e1.printStackTrace();}throw e;}}}



0 0
原创粉丝点击