一、声明式控制
/**
* 声明式事务示例
* @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;
}