对于工作流,在公司边摸索边开发,断断续续弄了三四个月,全都是泪啊。开始这里的工作流博客是为了自己整理思路逻辑,也为后面的人对工作流的开发有一个思路引导。
刚毕业不到半年吧,公司用到的是springboot,刚开始的时候逼格没有觉得springboot有过人的地方,但时间久了以后发现,springboot比以前使用的SSH与SSM都要方便的好多,特别是配置文件,对各种框架配置文件头疼的人,springboot的确是福音。此处的工作流项目就是基于springboot开发的,因为熟知的惰性缘故,以前并没有写关于springboot这一块的博客,嗯....,以后补上,此处不多讲关于springboot的知识,主要讲activiti的开发。
对于activiti,已经有了starter,不需要我们过多考虑activiti的依赖关系,只要在maven添加下面引用即可,此处使用的是5.X的版本,因为使用6.X版本有问题(具体问题忘记是什么的,该死该死,当时没有记笔记....,哎总以为自己记性会特别好,其实一点也不是....)。
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.20.0</version>
</dependency>
在application.yml中添加一下配置,其中database-schema-update是在运行的时候会检测activiti系统表是否存在,如果不存在会自动创建;history-level是在activiti完成一个环节后,保留在历史表(以act_hi开头的表)中的数据的级别,full全部保存;check-process-definitions表示不让activiti检测processes这个文件夹,如果不置为false会报错,这个文件夹中要保存的是bpmn20.xml文件,我们不一定要写死bpmn20.xml文件,所以将其置位false。在application.yml中配置数据库请自行配置。
spring:
activiti:
database-schema-update: true
history-level: full
check-process-definitions: false
上述配置完成后,运行这个项目就可以自动创建数据库表了,记得自己配置数据库啊,博客只是作为思路引导,千万别懒省事。
此时工作流的各个方法类已经注册到spring中了,只需要各个方法就行了。对了,关于activiti主要类与主要数据表,bpmn以及如何画在下一个博客中,此处只讲如果快速搭建工作流项目。
@Autowired
protected ProcessEngine processEngine;
@Autowired
protected RepositoryService repositoryService;
@Autowired
protected RuntimeService runtimeService;
@Autowired
protected TaskService taskService;
@Autowired
protected HistoryService historyService;
-----------------------------------------------------------分割线--------------------------------------------------------------------------------
做这个分割线原因是,我们在开发的时候,测试的时候不一定要运行整个项目,运行整个项目来测试一个方法对开发者来说是件头疼的事情,如果我们写一个main方法就可以进行运行岂不更省事,下面说如何操作。
将activiti.cfg.xml添加到resources目录下,主要是数据库的连接,以及存储bpmn时的字体,防止乱码的出现。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti" />
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="root" />
<!--<property name="dataSource" ref="dataSource"/>-->
<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>
<!-- 每次构建流程引擎时都会进行版本检测 -->
<property name="databaseSchemaUpdate" value="true" />
<property name="asyncExecutorActivate" value="false" />
<!-- 择定制历史存储的配置 -->
<property name="history" value="audit" />
</bean>
</beans>
在main方法中创建数据库表
public class CreateActivitiDB {
public static void main(String[] args){
ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault().setDatabaseSchemaUpdate("create").buildProcessEngine();
}
}
在mian方法中测试activiti时,我们需要手动创建ProcessEngine、RepositoryService 等各个方法。
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
部署一个工作流。第二个参数是bpmn的路径。
/**部署工作流*/
public void deploymentProcessDefinition(String processDefinitionKey,String resourceClassPath){
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
Deployment deployment = deploymentBuilder.name(processDefinitionKey)
.addClasspathResource(resourceClassPath)
.deploy();
logger.info("deployment name: {}",deployment.getName());
logger.info("deployment id: {}",deployment.getId());
}
工作流项目的搭建其实很简单,但对于bpmn的创建以及各个方法的混合运用确实有点麻烦,所谓会者不难,难者不会,只要对工作流了解透彻了,后期开发会方便很多。本人也不敢说彻底了解activiti,毕竟刚毕业不久,现在做的主要是使用,对源码的分析一点也没有做,写博客也是让自己清晰思路的一种方法吧。
github上有我更多的笔记:Raray-chuan (兮川) · GitHub,欢迎stars与following,如果有问题可以在issue中向我咨询
关注我的公众号,获取更多关于后端、大数据的知识