一、Flowable整合SpringBoot
Flowable在Java項目中開發我們更多的還是會在SpringBoot環境中來使用,是以整合SpringBoot環境還是必不可少的。具體我們來看看如何實作
1.添加相關依賴
首先需要添加必要的依賴
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter</artifactId>
<version>6.6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
2.添加對應的配置
然後在屬性檔案中添加資料的配置資訊和Flowable的必要配置。
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flowable1?serverTimezone=UTC&nullCatalogMeansCurrent=true
username: root
password: 123456
hikari:
minimum-idle: 5
idle-timeout: 600000
maximum-pool-size: 10
auto-commit: true
pool-name: MyHikariCP
max-lifetime: 1800000
connection-timeout: 30000
connection-test-query: SELECT 1
flowable:
async-executor-activate: false #關閉定時任務JOB
# 将databaseSchemaUpdate設定為true。當Flowable發現庫與資料庫表結構不一緻時,會自動将資料庫表結構更新至新版本。
database-schema-update: true
server:
port: 8082
系統啟動的時候檢查如果資料庫對應的表結構沒有建立,會幫助我們先建立對應的表結構。到此整合就搞定了,非常的簡單,然後我們就可以通過案例來測試了
3.案例應用
3.1 流程部署
- processes目錄下的任何BPMN 2.0流程定義都會被自動部署。建立processes目錄,并在其中建立示例流程定義(命名為one-task-process.bpmn20.xml)。
- cases目錄下的任何CMMN 1.1事例都會被自動部署。
- forms目錄下的任何Form定義都會被自動部署。
通過手動方式來部署,我們可以從容器中直接擷取相關的對象,ProcessEngine,RuntimeService等。
@SpringBootTest
class FlowableSpringBoot28ApplicationTests {
@Autowired
private ProcessEngine processEngine;
@Autowired
private RepositoryService repositoryService;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
/**
* Deploy
*/
@Test
void testDeploy() {
//RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("請假流程.bpmn20.xml")
.name("holiday")
.deploy();
System.out.println("deploy.getId() = " + deploy.getId());
System.out.println("deploy.getName() = " + deploy.getName());
}
}
3.2 啟動流程
/**
* start process
*/
@Test
void startFlow(){
Map<String,Object> map = new HashMap();
map.put("assignee0","zhangsan");
map.put("assignee1","zhangsan");
runtimeService.startProcessInstanceById("holiday28:2:3653a34e-ae45-11ec-969d-c03c59ad2248",map);
}
3.3 處理流程
/**
* complete Task
*/
@Test
void completeTask(){
Task task = taskService.createTaskQuery()
.processInstanceId("fb166cd8-ae45-11ec-92c4-c03c59ad2248")
.taskAssignee("zhangsan")
.singleResult();
if(task != null){
taskService.complete(task.getId());
System.out.println("complete ....");
}
}