1. pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.xx</groupId>
<artifactId>activitiPlay</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-conntector.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${alibaba-druid.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${spring-mybatis.version}</version>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
<mysql-conntector.version>5.1.39</mysql-conntector.version>
<alibaba-druid.version>1.1.20</alibaba-druid.version>
<swagger.version>2.6.1</swagger.version>
<spring-mybatis.version>2.0.0</spring-mybatis.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2. Configuration
@Configuration
public class ProcessEngineConfig {
@Bean
public ProcessEngineFactoryBean processEngine() {
ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
factoryBean.setProcessEngineConfiguration(processEngineConfiguration());
return factoryBean;
}
@Bean
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
//設置數據源的屬性
setDruidProperties(dataSource);
return dataSource;
}
//改成配置文件哦,我懶的改了
private void setDruidProperties(DruidDataSource dataSource) {
dataSource.setUrl("jdbc:mysql://ip:3306/zcy?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true");
dataSource.setUsername("root");
dataSource.setPassword("****");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setMaxActive(100);
dataSource.setInitialSize(10);
dataSource.setMinIdle(10);
dataSource.setMaxWait(15000);
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration() {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource());
config.setTransactionManager(transactionManager());
config.setDatabaseSchemaUpdate("true");
config.setHistory("audit");
return config;
}
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine) {
return processEngine.getRepositoryService();
}
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine) {
return processEngine.getRuntimeService();
}
@Bean
public TaskService taskService(ProcessEngine processEngine) {
return processEngine.getTaskService();
}
@Bean
public HistoryService historyService(ProcessEngine processEngine) {
return processEngine.getHistoryService();
}
}
3.application.yml
其實不寫這裏的數據庫配置,也沒有關係哦,是mybatis的配置。config裏面配置可以讀取這裏。
server:
port: 8000
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://10.40.66.184:3306/zcy?characterEncoding=UTF-8&characterSetResults=UTF-8&zeroDateTimeBehavior=convertToNull&nullCatalogMeansCurrent=true
username: root
password: 1qaz@WSX
driver-class-name: com.mysql.jdbc.Driver
druid:
max-active: 100
initial-size: 1
min-idle: 1
application:
name: zte-zcy
activiti:
check-process-definitions: false
4.Application.java
org.activiti.spring.boot.SecurityAutoConfiguration.class 要寫,否則要報錯
https://github.com/spring-projects/spring-boot/issues/13165
@SpringBootApplication(exclude={org.activiti.spring.boot.SecurityAutoConfiguration.class})
public class Appliation {
public static void main(String[] args) {
SpringApplication.run(Appliation.class, args);
}
}
5. controller 層 簡單例子。詳細見一章節
RestController
@RequestMapping("/demo")
@Api("demo")
public class DemoController {
@Autowired
private RepositoryService repositoryService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
@Autowired
private HistoryService historyService;
private String deployKey = "myFirstProcess";
@ApiOperation("流程部署的信息查詢")
@GetMapping("seven")
public void sevenDemo(){
List<Deployment> deploymentList = repositoryService.createDeploymentQuery().processDefinitionKey("myFirstProcess").list();
for(Deployment deployment : deploymentList){
System.out.println("流程部署ID:"+deployment.getId());
System.out.println("流程部署Name:"+deployment.getName());
System.out.println("------------");
}
}
@ApiOperation("流程定義的信息查詢")
@GetMapping("egiht")
public void egihtDemo(){
List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition processDefinition : processDefinitionList){
System.out.println("流程部署ID:"+processDefinition.getDeploymentId());
System.out.println("流程定義ID:"+processDefinition.getId());
System.out.println("流程定義Key:"+processDefinition.getKey());
System.out.println("流程定義Name:"+processDefinition.getName());
System.out.println("--------------");
}
}
@ApiOperation("啓動實例")
@GetMapping("first")
public void firstDemo(){
//myFirstProcess:3:1568
String processDefinitionId = "myFirstProcess:3:1568";
//啓動流程
//設置變量 全局有效
Map paramMap = new HashMap();
paramMap.put("p1","p1111");
paramMap.put("p2","p2222");
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId,paramMap);
System.out.println("流程實例ID:-->"+processInstance.getId());
System.out.println("流程定義ID:-->"+processInstance.getProcessDefinitionId());
System.out.println("流程執行ID:-->"+processInstance.getSuperExecutionId());
}
@ApiOperation("設置變量:runTimeserver")
@GetMapping("thirteen")
public void thirteenDemo(){
// 任務:-->task_hello_1 流程實例:-->10001 TASKID:-->10007executeId:10004
Person person = new Person(100,"zcy456","幼兒園");
runtimeService.setVariable("10004","人員姓名","zcy123");
runtimeService.setVariable("10004","person 對象",person);
}
/**
* runtimeService taskService 設置變量 會覆蓋。execid 和 taskid 是一對一的。其實設置一樣的
*/
@ApiOperation("獲取變量:runTimeserver")
@GetMapping("sixteen")
public void sixteenDemo(){
System.out.println(" 人員姓名a:"+runtimeService.getVariable("10004","人員姓名"));
System.out.println(" person 對象a:"+runtimeService.getVariable("10004","person 對象").toString());
System.out.println(" confirm a:"+runtimeService.getVariable("27504","confirm").toString());
}
@ApiOperation("設置變量:taskservice")
@GetMapping("fourteen")
public void fourteenDemo(){
Person person = new Person(200,"WXB456","幼兒園");
taskService.setVariable("10007","人員姓名","WXB123");
taskService.setVariable("10007","person 對象",person);
}
@ApiOperation("獲取變量:taskservice")
@GetMapping("fiveteen")
public void fiveteenDemo(){
System.out.println(" 人員姓名:"+taskService.getVariable("32502","人員姓名").toString());
System.out.println(" person 對象:"+taskService.getVariable("32502","person 對象").toString());
System.out.println(" confirm:"+taskService.getVariable("32506","confirm").toString());
}
@ApiOperation("查詢任務")
@GetMapping("two")
public void twoDemo(){
//查詢任務
List<Task> taskList = taskService.createTaskQuery().taskAssignee("朱春燕").list();
System.out.println("朱春燕任務:");
for(Task task : taskList){
System.out.println(" 任務:-->"+task.getName()+" 流程實例:-->"+task.getProcessInstanceId()+" TASKID:-->"+task.getId()+"executeId:"+task.getExecutionId());
}
}
@ApiOperation("指定實例的,查詢任務")
@GetMapping("four")
public void fourDemo(){
System.out.println("實例 10001 任務列表");
//查詢任務
List<Task> taskList = taskService.createTaskQuery().processInstanceId("27501").list();
for(Task task : taskList){
System.out.println(" 任務:-->"+task.getName()+" 流程實例:-->"+task.getProcessInstanceId()+" 處理人:-->"+task.getAssignee()+" TASKID:-->"+task.getId()+" exe id:-->"+task.getExecutionId());
}
}
@ApiOperation("完成任務")
@GetMapping("three")
public void threeDemo(){
//完成任務 完成實例 2501
System.out.println("完成任務 實例 17501");
//查詢任務
List<Task> taskList = taskService.createTaskQuery().taskAssignee("朱春燕").processInstanceId("17501").list();
for (Task task : taskList){
System.out.println(" 完成taskId:"+task.getId()+" 完成任務名稱:"+task.getName());
taskService.complete(task.getId());
}
}
@ApiOperation("完成任務:指定taskid")
@GetMapping("five")
public void fiveDemo(){
//完成任務 完成實例 2501
System.out.println("完成任務");
//查詢任務
Task task = taskService.createTaskQuery().taskId("27507").singleResult();
if(task != null){
System.out.println(" 完成taskId:"+task.getId()+" 完成任務名稱:"+task.getName());
Map paramMap = new HashMap();
paramMap.put("confirm","no");
taskService.complete(task.getId(),paramMap);
}else {
System.out.println("任務已完成");
}
}
@ApiOperation("查詢流程實例")
@GetMapping("six")
public void sixDemo(){
List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery().list();
for (ProcessInstance processInstance : processInstanceList){
System.out.println("實例id:"+processInstance.getProcessInstanceId()+
" 流程定義id:"+processInstance.getProcessDefinitionId()+
" 流程部署Id:" + processInstance.getDeploymentId());
System.out.println("-------");
}
}
@ApiOperation("刪除指定流程部署")
@GetMapping("nine")
public void nineDemo(){
repositoryService.deleteDeployment("1569",true);
}
@ApiOperation("刪除指定流程實例")
@GetMapping("ten")
public void tenDemo(){
runtimeService.deleteProcessInstance("17501","test");
}
@ApiOperation("查看歷史任務:指定人的")
@GetMapping("eleven")
public void elevenDemo(){
List<HistoricTaskInstance> historicTaskInstanceList = historyService.createHistoricTaskInstanceQuery().taskAssignee("朱春燕").orderByHistoricTaskInstanceEndTime().desc().list();
for(HistoricTaskInstance historicTaskInstance : historicTaskInstanceList){
System.out.println("歷史任務:"+historicTaskInstance.getName() + "TASKID:" + historicTaskInstance.getId()+" 開始時間:"+historicTaskInstance.getStartTime());
}
}
}