SpringBoot中引入Activiti并完成基本业务流程
2021-03-07 05:27
标签:处理 概述 XML base 管理器 connect roo 标识 对象 需要注意的是,在url中,添加了针对数据库的条件,其中最后一条nullCatalogMeansCurrent=true非常重要,至于有什么用就不概述了,但是没有这条语句的话就无法自动创建对应的二十八张表 需要注意的是,这里的依赖版本,需要对应数据库中act_ge_property表中schema.version版本信息,所以一般不建议在创建完表之后修改依赖信息 NOTICE: 执行完该Test后,ACT_RU_TASK表中的“小张:提交申请”的记录消失,出现“老大:经理审批”记录。 SpringBoot中引入Activiti并完成基本业务流程 标签:处理 概述 XML base 管理器 connect roo 标识 对象 原文地址:https://www.cnblogs.com/mirage0/p/14280416.htmlActiviti
DB中各个表的作用
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: ‘RE‘表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: ‘RU‘表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: ‘ID‘表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: ‘HI‘表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
两种整合方式
不使用SpringBootStarter
依赖
数据源
server:
port: 80
spring:
datasource:
url: jdbc:mysql://121.41.224.124:3307/activiti1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true&autoReconnect=true
driver-class-name: com.mysql.jdbc.Driver
username: root
password: 123
activiti:
database-schema-update: true
check-process-definitions: true
process-definition-location-prefix: classpath:/processes/
# process-definition-location-suffixes:
# - **.bpmn
# - **.bpmn20.xml
history-level: full
配置
@Configuration
public class ActivitiConfig {
/*
* 配置分为以下几步骤
* 1. 创建ActivitiConfig
* 2. 使用ActivitiConfig创建ProcessEngineFactoryBean
* 3. 使用ProcessEngineFactoryBean创建ProcessEngine对象
* 4. 使用ProcessEngine对象创建需要的服务对象
* */
private Logger logger = LoggerFactory.getLogger(ActivitiConfig.class);
private final DataSource dataSource;
private final PlatformTransactionManager platformTransactionManager;
@Autowired
public ActivitiConfig(DataSource dataSource, PlatformTransactionManager platformTransactionManager) {
this.dataSource = dataSource;
this.platformTransactionManager = platformTransactionManager;
}
/*
* 1. 创建配置文件,也就是提供一些配置信息,这样就可以自定义自己的创建信息了
* 需要一些参数,1. 数据源。2. 事务管理器。
* 这里还加入了自动扫描process包下的bpmn(流程定义文件)的设置,这样就可以省去了部署
* */
@Bean
public SpringProcessEngineConfiguration springProcessEngineConfiguration() {
SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
spec.setDataSource(dataSource);
spec.setTransactionManager(platformTransactionManager);
spec.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
Resource[] resources = null;
// 启动自动部署流程
try {
resources = new PathMatchingResourcePatternResolver().getResources("classpath*:process/*.bpmn");
} 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();
}
}
使用Starter
依赖
application.propertie
spring.activiti.database-schema-update=true
spring.activiti.process-definition-location-prefix=classpath:/process/
# 这里还是记得注意最后面添加url时添加的语句
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&nullCatalogMeansCurrent=true
spring.datasource.username=root
spring.datasource.password=root
从BPMN文件读取一个工作流
@Autowired
RepositoryService repositoryService;
@Autowired
TaskService taskService;
@Test
public void deploy() {
//获取仓库服务 :管理流程定义
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment()//创建一个部署的构建器
.addClasspathResource("XXXXXXXX/LeaveActiviti.bpmn")//从类路径中添加资源,一次只能添加一个资源
.name("请求单流程")//设置部署的名称
.category("办公类别")//设置部署的类别
.deploy();
System.out.println("部署的id"+deploy.getId());
System.out.println("部署的名称"+deploy.getName());
}
运行一个工作流
@Autowired
RuntimeService runtimeService;
/**
* 运行一个工作流
*/
@Test
void startProcess() {
//指定执行我们刚才部署的工作流程
String processDefKey = "leave";
//取运行时服务
if (runtimeService != null) log.error("Engine Success");
//取得流程实例
ProcessInstance instance = runtimeService.startProcessInstanceById("PROCESS_1:1:7504");
System.out.println("流程实例id:"+instance.getId());//流程实例id
System.out.println("流程定义id:"+instance.getProcessDefinitionId());//输出流程定义的id
}
运行结果:
2021-01-14 09:57:45.303 ERROR 6882 --- [ main] com.codedef.ActivitiApplicationTests : Engine Success
流程实例id:10001
流程定义id:PROCESS_1:1:7504
查询所有待办
/**
* 查询待办
*/
@Test
void getTaskList() {
List
查询某个人的待办
/**
* 根据代理人查询当前任务的信息
*/
@Test
void getTaskByAssignee() {
String assignee;
List
处理一个任务
/**
* 完成一个任务
*/
@Test
void compileTask() {
String taskId="15005";
//taskId:任务id
taskService.complete(taskId);
System.out.println("当前任务执行完毕");
}
此时再次执行查询任务的Test,小张的任务为空,老大的任务中出现一条记录“Task[id=17502, name=经理审批]”。多人会签
文章标题:SpringBoot中引入Activiti并完成基本业务流程
文章链接:http://soscw.com/index.php/essay/61189.html