一、声明式控制
/** * 声明式事务示例 * @param atom * @return */ public static boolean tx2(IAtom atom) { return Db.tx(atom); } /** * 声明式事务示例 * @param configName * @param atom * @return */ public static boolean tx2(String configName, IAtom atom) { return Db.use(configName).tx(atom); }
二、手动控制
/** * 开始事务 * @throws SQLException */ public static void beginTran() throws SQLException { DbKit.getConfig().setThreadLocalConnection(DbKit.getConfig().getConnection()); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(false); } /** * 开始事务 * @param configName * @throws SQLException */ public static void beginTran(String configName) throws SQLException { DbKit.getConfig(configName).setThreadLocalConnection(DbKit.getConfig(configName).getConnection()); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(false); } /** * 事务回滚 * @throws SQLException */ public static void rollback() throws SQLException { DbKit.getConfig().getThreadLocalConnection().rollback(); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig().removeThreadLocalConnection(); } /** * 事务回滚 * @param configName * @throws SQLException */ public static void rollback(String configName) throws SQLException { DbKit.getConfig(configName).getThreadLocalConnection().rollback(); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig(configName).removeThreadLocalConnection(); } /** * 事务提交 * @throws SQLException */ public static void commit() throws SQLException { DbKit.getConfig().getThreadLocalConnection().commit(); DbKit.getConfig().getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig().removeThreadLocalConnection(); } /** * 事务提交 * @param configName * @throws SQLException */ public static void commit(String configName) throws SQLException { DbKit.getConfig(configName).getThreadLocalConnection().commit(); DbKit.getConfig(configName).getThreadLocalConnection().setAutoCommit(true); DbKit.getConfig(configName).removeThreadLocalConnection(); }
使用方法:
try { // 开始事务 ExtDb.beginTran(); // 保存主表 String infoId = applyInfoService.saveEasInfo(doc); // 保存材料 applyInfoService.saveEasAttr(doc, infoId, infoNo); // 事务提交 ExtDb.commit(); } catch (Exception e) { // 事务回滚 ExtDb.rollback(); // 抛出异常 throw e; }