-
spring boot 整合 activiti
- 创建一个spring boot项目。
- pom文件中加入以下依赖:
<!--activiti-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
- 创建config,项目运行将创建activiti所需要的表
package com.example.activite.config;
import org.activiti.engine.*;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.io.IOException;
@Configuration
public class ActivitiConfig {
@Autowired
private DataSource dataSource;
@Autowired
private PlatformTransactionManager platformTransactionManager;
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration(){
SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
spec.setDataSource(dataSource);
spec.setTransactionManager(platformTransactionManager);
spec.setDatabaseSchemaUpdate("true");
Resource[] resources = null;
// 启动自动部署流程
try {
resources = new PathMatchingResourcePatternResolver().getResources("classpath*:processes/*.xml");
} catch (IOException e) {
e.printStackTrace();
}
spec.setDeploymentResources(resources);
return spec;
}
@Bean
public ProcessEngineFactoryBean processEngine(){
ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
return processEngineFactoryBean;
}
@Bean
public RepositoryService repositoryService() throws Exception{
return processEngine().getObject().getRepositoryService();
}
@Bean
public RuntimeService runtimeService() throws Exception{
return processEngine().getObject().getRuntimeService();
}
@Bean
public TaskService taskService() throws Exception{
return processEngine().getObject().getTaskService();
}
@Bean
public HistoryService historyService() throws Exception{
return processEngine().getObject().getHistoryService();
}
}
- 主启动类注解:
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
-
resource下创建一个文件夹用来存放流程文件
目录结构 -
启动项目,查看数据库是否创建表,这样就整合好了。
数据库表
-
整合过程中遇到的问题
- 我的项目用的是mybatis-plus,而activiti使用的是mybatis,或者是自己的mybatis与activiti的mybatis版本冲突。
解决办法:
# 排除activiti的mybatis,使用自己项目的mybatis
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
- 部署流程的时候出现空指针.
下面是我的测试用例
//部署流程
@org.junit.jupiter.api.Test
public void deployment() {
//1.创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
//3.进行部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/firstProcess.xml") // bpmn文件
.addClasspathResource("processes/firstProcess.png") // 图片文件
.name("请假申请单流程")
.deploy();
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
}
解决方法:在保证项目正常启动的情况下如果还出现空指针,那就可能是缺少了上面的第三点(不要用main方法测试)
- 启动报错Error creating bean with name 'processEngine'
主要原因是:在act_ge_property表中的数据被清除了、使用demo类再次 部署流程定义后。或者把表全删了,重新创建。
activiti 的部署 启动(单元测试)
- 部署
package org.activiti.engine;
import com.example.activite.SpringbootActivitiApplication;
import org.activiti.engine.repository.Deployment;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest(classes = SpringbootActivitiApplication.class)
@RunWith(SpringRunner.class)
public class Test {
@org.junit.jupiter.api.Test
public void buShu(){
//1.创建ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
//3.进行部署
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("processes/firstProcess.xml") // bpmn文件
.addClasspathResource("processes/firstProcess.png") // 图片文件
.name("请假申请单流程")
.deploy();
System.out.println("流程部署id:" + deployment.getId());
System.out.println("流程部署名称:" + deployment.getName());
}
}
部署成功
image.png
网友评论