千家信息网

activiti事务和业务事务共同使用的方法

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,今天小编给大家分享一下activiti事务和业务事务共同使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2026年10月31日activiti事务和业务事务共同使用的方法

今天小编给大家分享一下activiti事务和业务事务共同使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:

  1. 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

  2. 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。

相信每个项目都有自己的事务控制管理方法。但是怎么和activiti的事务相结合使用呢?

activiti基于spring的事务集成网上的资料很多。这里省略1000字。

但是,有的项目并没有使用spring,那怎么控制事务呢?

1、创建activiti的配置信息:

StandaloneProcessEngineConfiguration conf = (StandaloneProcessEngineConfiguration) ProcessEngineConfiguration                                        .createStandaloneProcessEngineConfiguration();

2、设置activiti配置信息(比如是否自动更新,是否使用历史,字体...):

conf.setDatabaseSchemaUpdate("true");                        conf.setDbHistoryUsed(true);                        conf.setHistory("full");                        conf.setActivityFontName("宋体");                        conf.setJobExecutorActivate(false);

3、设置数据库的DataSource

conf.setDataSource(DBManager.getDataSource());

请注意:这个DBManager.getDataSource()是自己封装的代码。

4、设置事务管理工厂(CustomJdbcTransactionFactory这个方法时我自己写的,下面会详细介绍):

CustomJdbcTransactionFactory jdbcTransactionFactory=                                        new CustomJdbcTransactionFactory();                        conf.setTransactionFactory(jdbcTransactionFactory);

重点就是在这了。

自己的事务会开启一个数据库连接Connection conn = dataSource.getConnection(),自己的所有操作都会在这个连接中完成。activiti的操作数据的时候也会打开一个连接dataSource.getConnection(),操作自己的数据。那就会出现问题,不在同一个连接中,何谈事务啊?

StandaloneProcessEngineConfiguration 中有个变量事务管理器。

我们可以重写事务管理器里面打开连接的方法,然后再set配置对象conf中。

import java.sql.Connection;

import java.sql.SQLException;import javax.sql.DataSource;import org.apache.ibatis.logging.Log;import org.apache.ibatis.logging.LogFactory;import org.apache.ibatis.session.TransactionIsolationLevel;import org.apache.ibatis.transaction.jdbc.JdbcTransaction;import com.fangdo.core.db.DBManager;public class CustomJdbcTransaction extends JdbcTransaction {        private static final Log log = LogFactory.getLog(CustomJdbcTransaction.class);        public CustomJdbcTransaction(Connection connection) {                super(connection);        }        public CustomJdbcTransaction(DataSource ds,                        TransactionIsolationLevel desiredLevel, boolean desiredAutoCommit) {                super(ds, desiredLevel, desiredAutoCommit);        }        @Override        protected void openConnection() throws SQLException {//              super.openConnection();                connection = DBManager.getConnection();                if (log.isDebugEnabled()) {              log.debug("{CustomJdbcTransaction } Openning JDBC Connection"+connection.hashCode()+"[]"+autoCommmit);            }//          connection = dataSource.getConnection();            if (level != null) {              connection.setTransactionIsolation(level.getLevel());            }            setDesiredAutoCommit(autoCommmit);        }        @Override        public void close() throws SQLException {                if (log.isDebugEnabled()) {                      log.debug("{CustomJdbcTransaction } closing JDBC Connection"+connection.hashCode());                    }//              super.close();        }        @Override        public void commit() throws SQLException {                // TODO Auto-generated method stub//              super.commit();        }        @Override        public void rollback() throws SQLException {                // TODO Auto-generated method stub//              super.rollback();        }}

重写了openConnection()方法,获取数据库连接是我业务打开的那个连接。

连接关闭close(),提交commit(),回滚rollback() ,全部注销了。对数据库连接的操作都有我业务来控制,不让activiti控制了。

import java.sql.Connection;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.session.TransactionIsolationLevel;import org.apache.ibatis.transaction.Transaction;import org.apache.ibatis.transaction.jdbc.JdbcTransaction;import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;public class CustomJdbcTransactionFactory extends JdbcTransactionFactory {        @Override        public void setProperties(Properties props) {                super.setProperties(props);        }        @Override        public Transaction newTransaction(Connection conn) {//              return super.newTransaction(conn);                return new CustomJdbcTransaction(conn);        }        @Override        public Transaction newTransaction(DataSource ds,                        TransactionIsolationLevel level, boolean autoCommit) {//              return super.newTransaction(ds, level, autoCommit);                return new CustomJdbcTransaction(ds, level, autoCommit);        }}

CustomJdbcTransactionFactory就是创建工厂。很好理解。 5、创建引擎:

processEngine = conf.buildProcessEngine();

6、使用例子:

QueryHelper.startTransaction();//开启事务                                                taskService.claim(taskId, getPhoneId());                        taskService.complete(taskId, variables);                        。。。。。//自己的业务代码                        QueryHelper.endTransaction();//关闭事务

自己业务和activiti共用了同一个事务,如果抛出异常,就会回滚回去了。

这里简单说一个,QueryHelper.startTransaction()主要做的事情:

Connection conn = dataSource.getConnection();conn.setAutoCommit(false);

QueryHelper.endTransaction()主要做的事情是:

Connection connection = getConnection();                        connection.commit();//提交JDBC事务                           connection.setAutoCommit(true);// 恢复JDBC事务的默认提交方式

以上就是"activiti事务和业务事务共同使用的方法"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

事务 数据 方法 数据库 业务 知识 篇文章 控制 管理 事务管理 就是 配置 事情 代码 信息 内容 工厂 序列 应用程序 状态 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 南京欣网互联网科技 致聘互联网科技 银优互联网科技有限公司 睿民互联网科技 时间互联网络科技 顺玮阁互联网科技 联恩商钥互联网科技有限公司 华脉科技工业互联网产品 中化能源互联网科技招聘 世界互联网科技公司市值排名 米聚互联网科技南京有限公司排面 中国科技创新与世界互联网大会 东莞新华互联网科技学校 互联网科技实习生岗位 云南省自由互联网科技有限公司 江苏互联网智能科技软件 张召忠谈中国互联网科技 领航科技大厦互联网公司 互联网高科技绘画 湖北九亚互联网络科技有限公司 广东万易互联网科技有限公司惠州分公司 深圳恒合互联网络科技有限公司 昭通云南众福互联网科技有限公司 厦门千工互联网科技有限公司 晓花互联网科技有限公司网址 兰石爱特工业互联网科技分公司 互联网科技和医药行业 互联网的科技体现在哪里 互联网对科技影响
0