public void tx(IAtom atom) {// IAtom 是一个jfinal中一个接口,run里面是需要执行的代码,可以自定义
String dbName = atom.db();// 获取spring中DataSourceTransactionManager的bean名称(通用通过ApplicationContext.getBean(DataSourceTransactionManager.class))
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) DBSpringContextHolder
.getBean(dbName, DataSourceTransactionManager.class);
DefaultTransactionDefinition txDefinition = new DefaultTransactionDefinition();
/*
* 设置隔离级别Isolation枚举 DEFAULT(-1), READ_UNCOMMITTED(1), =>读未提交 READ_COMMITTED(2),
* =>读已提交 REPEATABLE_READ(4), =>可重复读 SERIALIZABLE(8); =>串行花
*/
txDefinition.setIsolationLevel(atom.isolation().value());
/*
* 事务传播级别
*
* 你有事务我就用你的,你没有我就自己创建一个,反正老子就是要事务。
* REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),
*
* 你有事务我就用你的,你没有就算了,我也懒得麻烦。
* SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),
*
* 你没事务给我用还敢调用老子,异常走你~~~~
* MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),
*
*
* 老子不管你那套,你有事务是你的事,一边待着。老子自己得创建自己的事务。
* REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),
*
*
* 老子不要事务,你调用我就了不起啊,让你的事务一边待着。我就按非事务方式跑
* NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),
*
* 老子说了不要事务你还来,异常走你~~~~~~~~~~~ NEVER(TransactionDefinition.PROPAGATION_NEVER),
*
* 先说好,你有没有事务,老子就创建新的。你要是有我就在你事务下创建嵌套事件。我提交、回滚与你无关。
* NESTED(TransactionDefinition.PROPAGATION_NESTED);
*/
txDefinition.setPropagationBehavior(atom.propagation().value());
/*
* 是否可读 boolean
*/
txDefinition.setReadOnly(atom.readOnly());
/*
* 设置超时 设置要应用的超时(以秒为单位)。 默认值为TIMEOUT_DEFAULT(-1)。
* 专为与PROPAGATION_REQUIRED或PROPAGATION_REQUIRES_NEW一起使用而设计,因为它仅适用于新启动的交易。
* 请注意,不支持超时的事务管理器在给出除TIMEOUT_DEFAULT以外的任何其他超时时,将引发异常。
*/
txDefinition.setTimeout(atom.timeout());
TransactionStatus transactionStatus = transactionManager.getTransaction(txDefinition);
try {
boolean result = atom.run();
if (result) {
transactionManager.commit(transactionStatus);
} else {
transactionManager.rollback(transactionStatus);
}
} catch (Exception var7) {
transactionManager.rollback(transactionStatus);
log.error(var7.getMessage(), var7);
var7.printStackTrace();
throw var7;
}
}
静态方法中及手动开始事务
最新推荐文章于 2024-06-17 15:18:48 发布