标签:处理 概述 XML base 管理器 connect roo 标识 对象
Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。
ACT_RE_*: ‘RE‘表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
ACT_RU_*: ‘RU‘表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
ACT_ID_*: ‘ID‘表示identity。 这些表包含身份信息,比如用户,组等等。
ACT_HI_*: ‘HI‘表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
ACT_GE_*: 通用数据, 用于不同场景下,如存放资源文件。
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
<!--其他依赖有需要再加-->
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
需要注意的是,在url中,添加了针对数据库的条件,其中最后一条nullCatalogMeansCurrent=true非常重要,至于有什么用就不概述了,但是没有这条语句的话就无法自动创建对应的二十八张表
@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();
}
}
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M3.1</version>
</dependency>
需要注意的是,这里的依赖版本,需要对应数据库中act_ge_property表中schema.version版本信息,所以一般不建议在创建完表之后修改依赖信息
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
@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<Task> tasks = taskService.createTaskQuery().list();
log.info("tasks len: " + tasks.size());
tasks.stream().forEach(e -> {
System.out.println(e);
});
}
运行结果:
2021-01-14 10:23:00.962 INFO 8496 --- [ main] com.codedef.ActivitiApplicationTests : tasks len: 1
Task[id=15005, name=提交申请]
/**
* 根据代理人查询当前任务的信息
*/
@Test
void getTaskByAssignee() {
String assignee;
List<Task> list;
//创建一个任务查询对象
TaskQuery taskQuery = taskService.createTaskQuery();
//任务的办理人
assignee = "老大";
log.info("老大的任务:");
list = taskQuery.taskAssignee(assignee).list();
list.stream().forEach(e -> {
System.out.println(e);
});
System.out.println("\n\n\n\n");
//任务的办理人
assignee = "小张";
log.info("小张的任务:");
list = taskQuery.taskAssignee(assignee).list();
list.stream().forEach(e -> {
System.out.println(e);
});
}
运行结果:
com.codedef.ActivitiApplicationTests : 小张的任务:
Task[id=15005, name=提交申请]
/**
* 完成一个任务
*/
@Test
void compileTask() {
String taskId="15005";
//taskId:任务id
taskService.complete(taskId);
System.out.println("当前任务执行完毕");
}
NOTICE: 执行完该Test后,ACT_RU_TASK表中的“小张:提交申请”的记录消失,出现“老大:经理审批”记录。
此时再次执行查询任务的Test,小张的任务为空,老大的任务中出现一条记录“Task[id=17502, name=经理审批]”。
SpringBoot中引入Activiti并完成基本业务流程
标签:处理 概述 XML base 管理器 connect roo 标识 对象
原文地址:https://www.cnblogs.com/mirage0/p/14280416.html