activiti笔记_syntax error, error in :'rder by ri.create_time de-程序员宅基地

技术标签: activity  

1、对流程设计器的使用说明

打开菜单Windows->Preferences->Activiti->Save下流程流程图片的生成方式:

虽然流程引擎在单独部署bpmn文件时会自动生成图片,但在实际开发过程中,自动生成的图片会导致和BPMN中的坐标有出入,在实际项目中展示流程当前位置图会有问题。

所在完成以上配置后,会由我们自己来管理流程图片。在发布流程时把流程规则文件和流程图片一起上传就行了。

2、数据库

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。

1)        ACT_RE_*: 'RE'表示repository 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。

2)        ACT_RU_*: 'RU'表示runtime 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。

3)        ACT_ID_*: 'ID'表示identity 这些表包含身份信息,比如用户,组等等。

4)        ACT_HI_*: 'HI'表示history 这些表包含历史数据,比如历史流程实例, 变量,任务等等。

5)        ACT_GE_*: 通用数据, 用于不同场景下。

3、  资源库流程规则表

1)           act_re_deployment      部署信息表

2)         act_re_model          流程设计模型部署表

3)         act_re_procdef       流程定义数据表

4、运行时数据库表

1)         act_ru_execution     运行时流程执行实例表

2)         act_ru_identitylink   运行时流程人员表,主要存储任务节点与参与者的相关信息

3)         act_ru_task                运行时任务节点表

4)         act_ru_variable         运行时流程变量数据表

5、历史数据库表

1)         act_hi_actinst           历史节点表

2)         act_hi_attachment             历史附件表

3)         act_hi_comment                历史意见表

4)         act_hi_identitylink             历史流程人员表

5)         act_hi_detail                       历史详情表,提供历史变量的查询

6)         act_hi_procinst                   历史流程实例表

7)         act_hi_taskinst           历史任务实例表

8)         act_hi_varinst            历史变量表

6、组织机构表

  1. act_id_group             用户组信息表

  2. act_id_info                 用户扩展信息表

  3. act_id_membership 用户与用户组对应信息表

  4. act_id_user                用户信息表

这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足

7、通用数据表

  1. act_ge_bytearray               二进制数据表

  2. act_ge_property                属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,

8activiti.cfg.xml

Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。

定义数据库配置参数:

l  jdbcUrl数据库的JDBC URL

l  jdbcDriver对应不同数据库类型的驱动。

l  jdbcUsername连接数据库的用户名。

l  jdbcPassword连接数据库的密码。

基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):

l  jdbcMaxActiveConnections连接池中处于被使用状态的连接的最大值。默认为10

l  jdbcMaxIdleConnections连接池中处于空闲状态的连接的最大值。

l  jdbcMaxCheckoutTime连接被取出使用的最长时间,超过时间会被强制回收。 默认为2000020秒)。

l  jdbcMaxWaitTime这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为2000020秒)。

 

9、  springmybatis集成activiti时,注意mybatisactiviti版本冲突问题,如后台报”order by order by”错误时,原因就是由于mybatisspring版本的冲突问题。如下图

### The error may exist in org/activiti/db/mapping/entity/ProcessDefinition.xml
### The error may involve org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity.selectProcessDefinitionsByQueryCriteria_mysql
### The error occurred while executing a query
### SQL: select distinct RES.*              from ACT_RE_PROCDEF RES            WHERE  RES.VERSION_ = (select max(VERSION_) from ACT_RE_PROCDEF where KEY_ = RES.KEY_                                              )           order by  order by RES.DEPLOYMENT_ID_ desc       LIMIT ? OFFSET ?
### Cause: java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'rder by RES.DEPLOYMENT_ID_ desc  
 ',expect BY, actual BY by : select distinct RES.* 
           from ACT_RE_PROCDEF RES
          WHERE  RES.VERSION_ = (select max(VERSION_) from ACT_RE_PROCDEF where KEY_ = RES.KEY_ 
                ) 
        order by  order by RES.DEPLOYMENT_ID_ desc  
    LIMIT ? OFFSET ?

10、 引擎api

processEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();

processEngines.getDefaultProcessEngine()会在第一次被调用时初始并构建 process engine 接下来对该方法的调用返回的都是同一个流程引擎。 利用 ProcessEngines.init() ProcessEngines.destroy()可以正确创建、关闭流程引擎。ProcessEngines 会浏览所有 activiti.cfg.xml  activiti-context.xml 文件。对于那些 activiti.cfg.xml 文件, 将以 Activiti 特有的方式来构建流程引擎:

ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine() 对于那些activiti-context.xml 文件, 将以 Spring 的方式来构建流程引擎:首先,创建 spring 应用上下文;然后,从该上下文中获取
流程引擎。

11、 spring集成activiti

12、  

<!-- 加载activiti引擎 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
   <property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="processEngineConfiguration"
     class="org.activiti.spring.SpringProcessEngineConfiguration">
   <property name="dataSource" ref="druidDataSource" />
   <property name="transactionManager" ref="transactionManager" />
   <property name="databaseSchemaUpdate" value="true" />
   <property name="jobExecutorActivate" value="false" />
</bean>
<!-- activiti的各种服务接口 -->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
<!-- Druid连接池-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <!-- 基本属性 url、user、password -->
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize" value="1" />
    <property name="minIdle" value="1" />
    <property name="maxActive" value="20" />
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="60000" />
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="60000" />
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />
    <property name="validationQuery" value="SELECT 1" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <property name="poolPreparedStatements" value="false" />
    <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
    <!-- 配置监控统计拦截的filters,默认stat,可选mergeStat/wall/log4j -->
    <property name="filters" value="stat,wall,log4j" />
    <property name="proxyFilters">
        <list>
            <ref bean="mergeStat_filter" />
            <ref bean="log4j-filter" />
        </list>
    </property>
</bean>
<!--事务管理-->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="druidDataSource" />
</bean>

13、 流程变量:在流程实例中,可以将PO对象作为流程变量与流程实例进行关联,不过一定要实现Serializable接口。也可以将po主键作为业务key,在启动流程实例的时候与流程实例建立双向关联:PrcoessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, businessKey, variables);

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xyw591238/article/details/51596795

智能推荐

支付宝Wap支付你了解多少?_阿里wap支付-程序员宅基地

文章浏览阅读1.3w次。上几篇文章详细介绍了支付宝APP支付、微信APP支付此文章来介绍下支付宝Wap支付(也叫作手机网站支付) 目录 1、创建应用并获取APPID 2、配置应用环境 3、配置沙箱环境 4、服务端实现(Maven添加本地Jar包、集成并配置SDK)先上官方文档入口,支付宝文档入口模仿微信最最近做了更新,变得更简洁明了。【官方手机网站支付快速接入文档】1、创建应用并获取APPID_阿里wap支付

在Vue3.0中使用JSX的简单入门_vue3 jsx-程序员宅基地

文章浏览阅读2.1w次,点赞5次,收藏21次。JSX直入正题,vue3 对 jsx 和 ts 的支持更加完善,看一下 vue3 的 jsx 官方文档部分:非常的简陋了,但是他给我们指引了 vue3 中 jsx 的 babel 转换插件 jsx-next 。感兴趣的可以看一下他的 README,下面开始安装使用一下~安装 jsx-next实际上 vue-cli 建立的 vue3 项目中已经内置了 jsx 的这个编译插件,如果你不需要自定义配置,是不需要安装就可以即开即用 jsx 的,可谓是非常贴心了。安装过程如下: yarn add -D_vue3 jsx

LVGL8.1笔记1--显示移植(2022-0515)_lvgl单色屏-程序员宅基地

文章浏览阅读7.3k次,点赞14次,收藏89次。参考了LVGL的官方文档、很多的CSDN上的文章、正点原子的LVGL文档等 总结出来的比较详细的移植说明_lvgl单色屏

java容器类持有对象:Collection Map List Set Queue_collection map queue-程序员宅基地

文章浏览阅读424次。一、java容器类库的用途就是“保存对象”,并将其划分为两个不同的概念1、基本概念(1)Collection。一个独立元素的队列。这些元素都服从一个或者多个规则。List必须按照插入的顺序保存元素。set不能有重复的元素。Queue按照排队的规则来确定产生对象产生的顺序(2)Map。一组成对的“键值对”对象,允许你使用键来查找值。ArrayList允许你使用数字来查找值,因此在某种意义_collection map queue

【面试必备】Cookie 和 Session 的区别(6层楼分析透彻)_cookie和session 6层-程序员宅基地

文章浏览阅读795次,点赞2次,收藏9次。第一层楼什么是 Cookie 和 Session ?初级程序员高频面试题。什么是 CookieHTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie 使基于无状态的 HT..._cookie和session 6层

Git clone来的文件一般保存在哪_git clone的文件在哪-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏14次。都2021年了,还有人不知道git 的使用方法(那个人就是我。。。)最近要跑一个项目,然后呢看到说是最好使用git clone 的方法于是我打开了许久未用的git当时就在想,git下来的东西,放在哪呢。。然后网上了解到是命令行现在所在的目录里,所以好像就变成了一个命令行一样的功能,然后还是使用cd 这种一些列的操作cd到自己需要的文件夹路径下,再进行下载(假设在D盘)新建了一个 GitDownLoad的文件夹,然后cd进去,执行git clone对应的命令就行了..._git clone的文件在哪

随便推点

JIRA从6.3.6升级到7.0.0_back up jira home directory-程序员宅基地

文章浏览阅读1.7k次。1.备份原有Jira的db和安装文件,以便回退版本 数据路备份命令: Mysqldump –h(数据库地址) –u(用户名) –p(密码) –P(数据库端口号) (需要备份的数据库名称) &gt; xxx.sql2.下载jira6版本的最高版本,下载地址为https://www.atlassian.com/software/jira/download-archives,文件名为:atl..._back up jira home directory

LinkedHashMap如何保证顺序性-程序员宅基地

文章浏览阅读2.8k次。一. 前言先看一个例子,我们想在页面展示一周内的消费变化情况,用echarts面积图进行展示。如下:我们在后台将数据构造完成HashMap<String, Integer> map = new HashMap<>();map.put("星期一", 40);map.put("星期二", 43);map.put("星期三", 35);map.put("星期四", 55);map.put("星期五", 45);map.put("星期六", 35);map.put("星_linkedhashmap如何保证顺序

python3 异步 asyncio 动态添加任务_thread call_soon_threadsafe-程序员宅基地

文章浏览阅读5.3k次。asyncio.run_forever()下动态添加任务方法一、asyncio.run_coroutine_threadsafe(coroutine, loop)方法二、asyncio.call_soon_threadsafe(callback, *args, context=None)方法一、实例run_coroutine_threadsafe通过添加新的coroutin对象,放入loop内,动态添加。(爬虫正解)importasyncioimporttimefrom..._thread call_soon_threadsafe

【计算摄影】图像与视频超分辨,深度学习核心技术与展望-程序员宅基地

文章浏览阅读1.1k次。大家好,这是专栏《计算摄影》的第七篇文章,这一个专栏来自于计算机科学与摄影艺术的交叉学科。 作者&am..._图像超分辨讲解视频

闲置笔记本的群晖NAS初体验_笔记本装群晖-程序员宅基地

文章浏览阅读2.9k次。闲置笔记本的 群晖 NAS初体验_笔记本装群晖

docker镜像latest具体是哪个版本_docker镜像laster版本号-程序员宅基地

文章浏览阅读4.4k次,点赞6次,收藏12次。其实docker也有提供镜像具体版本的获取方式。docker 中 image 镜像管理image 中有一个inspect显示一个或多个图像的详细信息那么组合一下,就是这样:_docker镜像laster版本号

推荐文章

热门文章

相关标签