第一步是先集成好activiti,我使用的是5.22.0,使用springboot集成,pom文件如下:


  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>1.5.2.RELEASE</version>
  5. </parent>
  6. <span class="hljs-tag">&lt;<span class="hljs-name">properties</span>&gt;</span>
  7. 	<span class="hljs-tag">&lt;<span class="hljs-name">java.version</span>&gt;</span>1.8<span class="hljs-tag">&lt;/<span class="hljs-name">java.version</span>&gt;</span>
  8. 	<span class="hljs-tag">&lt;<span class="hljs-name">activiti.version</span>&gt;</span>5.22.0<span class="hljs-tag">&lt;/<span class="hljs-name">activiti.version</span>&gt;</span>
  9. <span class="hljs-tag">&lt;/<span class="hljs-name">properties</span>&gt;</span>
  10. <span class="hljs-tag">&lt;<span class="hljs-name">dependencies</span>&gt;</span>
  11. 	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
  12. 		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
  13. 		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-thymeleaf<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
  14. 	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
  15. 	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
  16. 		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
  17. 		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-web<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
  18. 	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
  19. 	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
  20. 		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.activiti<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
  21. 		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>activiti-spring-boot-starter-basic<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
  22. 		<span class="hljs-tag">&lt;<span class="hljs-name">version</span>&gt;</span>${activiti.version}<span class="hljs-tag">&lt;/<span class="hljs-name">version</span>&gt;</span>
  23. 	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
  24. 	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
  25. 		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>mysql<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
  26. 		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>mysql-connector-java<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
  27. 		<span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>runtime<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
  28. 	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
  29. 	<span class="hljs-tag">&lt;<span class="hljs-name">dependency</span>&gt;</span>
  30. 		<span class="hljs-tag">&lt;<span class="hljs-name">groupId</span>&gt;</span>org.springframework.boot<span class="hljs-tag">&lt;/<span class="hljs-name">groupId</span>&gt;</span>
  31. 		<span class="hljs-tag">&lt;<span class="hljs-name">artifactId</span>&gt;</span>spring-boot-starter-test<span class="hljs-tag">&lt;/<span class="hljs-name">artifactId</span>&gt;</span>
  32. 		<span class="hljs-tag">&lt;<span class="hljs-name">scope</span>&gt;</span>test<span class="hljs-tag">&lt;/<span class="hljs-name">scope</span>&gt;</span>
  33. 	<span class="hljs-tag">&lt;/<span class="hljs-name">dependency</span>&gt;</span>
  34. <span class="hljs-tag">&lt;/<span class="hljs-name">dependencies</span>&gt;</span>

配置springboot的启动配置文件中的数据库,我们指定一个独立的数据库来进行创建activiti的数据库

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/activiti?characterEncoding=utf8
  4. username: root
  5. password: root
  6. driver-class-name: com.mysql.jdbc.Driver
  7. jpa:
  8. show-sql: true
  9. hibernate:
  10. ddl-auto: false
  11. debug: true

运行启动类,

  1. @SpringBootApplication
  2. public class ActivitiApplication {
  3. <span class="hljs-comment">/**
  4.  * Description:
  5.  * <span class="hljs-doctag">@author</span> Liu Wenjie
  6.  * <span class="hljs-doctag">@date</span> 2018年2月11日 上午10:38:00
  7.  * <span class="hljs-doctag">@param</span> args
  8.  */</span>
  9. <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String[] args)</span> </span>{
  10. 	SpringApplication.run(ActivitiApplication.class, args);
  11. }
  12. }

我们打开数据库,可以看到已经动态生成了对应的数据库文件,而正常业务我们不想使用activiti的数据库作为数据源的链接源,那么我们就修改配置文件的链接到test 数据库上,修改后的配置如下:

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/test?characterEncoding=utf8
  4. username: root
  5. password: root
  6. driver-class-name: com.mysql.jdbc.Driver
  7. jpa:
  8. show-sql: true
  9. hibernate:
  10. ddl-auto: false
  11. debug: true

如果我们现在启动,那么activiti会默认在test database上创建数据库表结构,这时候我们需要增加一个配置类,

  1. @Component
  2. public class ActivitiProcessEngineConfigurationConfigurer implements ProcessEngineConfigurationConfigurer {
  3. <span class="hljs-comment">/**
  4.  * &lt;p&gt;Description: &lt;/p&gt;
  5.  * <span class="hljs-doctag">@author</span> Liu Wenjie
  6.  * <span class="hljs-doctag">@date</span> 2018年2月12日 上午11:09:19
  7.  * <span class="hljs-doctag">@param</span> processEngineConfiguration
  8.  * <span class="hljs-doctag">@see</span> org.activiti.spring.boot.ProcessEngineConfigurationConfigurer#configure(org.activiti.spring.SpringProcessEngineConfiguration)
  9.  */</span>
  10. <span class="hljs-meta">@Override</span>
  11. <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">configure</span><span class="hljs-params">(SpringProcessEngineConfiguration processEngineConfiguration)</span> </span>{
  12. 	processEngineConfiguration.setDatabaseTablePrefix(<span class="hljs-string">"activiti."</span>);
  13. 	processEngineConfiguration.setTablePrefixIsSchema(<span class="hljs-keyword">true</span>);
  14. 	processEngineConfiguration.setDatabaseSchemaUpdate(<span class="hljs-string">"no"</span>);
  15. }
  16. }

configure方法里的方法是为了让activiti开始时不创建也不校验activiti版本,然后在业务执行的时候都增加对应的数据库前缀,这样变相的解决了activiti的表与业务表不在同一个数据库的问题。

activiti的源码关键点在:

DbSqlSession.class中的以下方法:

  1. public void performSchemaOperationsProcessEngineBuild() {
  2. String databaseSchemaUpdate = Context.getProcessEngineConfiguration().getDatabaseSchemaUpdate();
  3. if (ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)) {
  4. try {
  5. dbSchemaDrop();
  6. } catch (RuntimeException e) {
  7. // ignore
  8. }
  9. }
  10. if ( org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP.equals(databaseSchemaUpdate)
  11. || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)
  12. || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE.equals(databaseSchemaUpdate)
  13. ) {
  14. dbSchemaCreate();
  15. } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE.equals(databaseSchemaUpdate)) {
  16.   dbSchemaCheckVersion();
  17. } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE.equals(databaseSchemaUpdate)) {
  18.   dbSchemaUpdate();
  19. }
  20. }


  1. </div>原文地址:https://my.oschina.net/6WiVT5YRI7U/blog/1621605
  2. </div>
posted @
2019-06-25 17:31 
星朝 
阅读(...) 
评论(...) 
编辑 
收藏

activiti 如何使用database前缀来区分activiti数据库和业务数据库的更多相关文章

  1. 删除数据库时提示数据库正在被使用,无法删除(Cannot drop database databasename because it is currently in use)的问题

    删除数据库时提示数据库正在被使用,无法删除(Cannot drop database databasename because it is currently in use)的问题   删除数据库时提 ...

  2. Activiti系列——如何在eclipse中安装 Activiti Designer插件

    这两天在评估jbpm和Activiti,需要安装一个Activiti Designer插件试用一下. 一.在线安装 从<Activiti实战>了解到可以通过如下方式安装 打开Eclipse ...

  3. Activiti 5.18启动流程到完成所有任务之间的数据库变化(转)

    来写一下Activiti 5.18版本从启动流程到整个流程结束之间数据库表的变化 先给出流程图,很简单的流程,就是两个UserTask: 代码如下: DeploymentBuilder builder ...

  4. 首先给大家介绍一下数据库project师,数据库project师(Database Engineer),是从事管理和维护数据库管理系统(DBMS)

    摘要 MySQL的最初的核心思想,主要是开源.简便易用.其开发可追溯至1985年,而第一个内部发行版本号诞生,已经是1995年. 到1998年,MySQL已经能够支持10中操作系统了.当中就包含win ...

  5. Sql server 使用drop database 语句,无法删除正在使用的数据库的解决办法

    使用DROP DATABASE 删除数据库  显示“无法删除数据库 ,因为该数据库当前正在使用. 解决办法:在删除某一个数据库(下例中的“DB1”数据库)前,强制kill掉该数据库上的所有数据库连接. ...

  6. Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整

    一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...

  7. windows10; ERROR 1010 (HY000): Error dropping database (can't rmdir './test/', errno: 17);默认数据库位置查找

    1.想要导入数据到一个数据库中,但是,无法导入,同时也无法删除数据库重新建立-----------------------------备份当前数据库 2,分析:很多资料显示说数据库下有异常文件,于是就 ...

  8. SQLServer配置镜像,无法将 ALTER DATABASE 命令发送到远程服务器实例,数据库镜像配置未更改。请确保该服务器已连接,然后重试。

    问题描述: 在做镜像的时候镜像已经连接成功,但是见证服务器却报错 然后tcping了端口啥都是通的,后面发现原来是主机名称一样导致的问题 发现host文件里面: C:\Windows\System32 ...

  9. AbstractRoutingDataSource实现动态数据源切换 专题

    需求:系统中要实现切换数据库(业务数据库和his数据库) 网上很多资料上有提到AbstractRoutingDataSource,大致是这么说的 在Spring 2.0.1中引入了AbstractRo ...

随机推荐

  1. Listview的条目item内的点击响应事件

    还是这张图 这里的历史列表就是一个ListView,抛开该界面中ScrollView或者RecycleView与该ListView会有冲突,所谓的冲突,说白了就是父控件与子控件两者间的关系冲突,该冲突 ...

  2. 存储过程--mysql

    https://zhuanlan.zhihu.com/p/23423264 存储过程-官方解释: 是sql语句和控制语句的预编译集合.以一个名称存储并作为一个单元处理. 存储过程-直白的说: 把需要的 ...

  3. python3.7 安装gensim使用word2Vec库

    应用的文章(个人试验过,完全正确):https://radimrehurek.com/gensim/index.html#install

  4. 利用Factory-boy来生成实例数据

    库和版本:Faker==2.0.0factory-boy==2.12.0 官方文档:https://factoryboy.readthedocs.io/en/latest/index.html 1. ...

  5. JavaScript--返回顶部方法:锚链接、行内式js写法、外链式、内嵌式

    返回网页顶部方法 一.锚链接 simpleDemo: <!DOCTYPE html> <html lang="en"> <head> <m ...

  6. centOS7 安装vsftp服务器

    一.目的:有许多时候我们需要从自己机器上,上传文件到Linux服务器上,想要上传文件就必须要通过FTP 协议(File Transfer Protocol(文件传输协议)).所以要在服务器上配置FTP ...

  7. Oracle之PL/SQL编程

    PL/SQL(Procedural Language/SQL,过程语言/SQL) 是结合了Oracel过程语言和结构化查询语言(SQL)的一种扩展语言. 优点: (1)PL/SQL具有编程语言的特点, ...

  8. TCPThree_C杯 Day1

    题解 或 正规题解 已经很详细,不再赘述. 跟着wjx打代码,不怕卡题. 忘开long long智障错误第四次左偏树

  9. 【C++】位运算实现加减乘除

    #include<iostream> #include<assert.h> using namespace std; // 位运算实现加减乘除 int myAdd(int nu ...

  10. hdu1532&&poj1273 最大流

    Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1. (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4 ...