千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,今天小编给大家分享一下activiti事务和业务事务共同使用的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获
千家信息网最后更新 2025年01月23日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安全错误 数据库的锁怎样保障安全 网络安全宣传活动调查问卷图片 数据库没权限创建用户 网络安全倾向性问题及矛盾困难 数据库修复显示不是有效的文件夹 查看ibm服务器型号 网络安全教育手黑板报 物理服务器安装几个数据库 网卡和服务器远程管理模块 长春软件开发兼职网 有关网络安全的政治小论文 创业板软件开发类上市公司 江苏企业软件开发服务费 曲阜软件开发有限公司在线咨询 公安部网络安全保卫局能考吗 个人鸿蒙软件开发有前景吗 五年级网络安全的征文 服务器安全市场规模 泰州创新网络技术报价 网络安全专业市场就业情况 租用香港服务器搭建游戏 炸毁mc服务器的主播 遵义欣鼎成网络技术开发 jsp 增删改 数据库 上海集博gbi数据库 可配置页面 数据库 设计 银行业 网络安全报告 软件开发行业现状2021 陕西串口服务器云主机 统一软件开发过程简称 埃及dns服务器
0