1.Spring整合Activiti
步驟一:導入依賴
<!--activiti常規依賴-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
步驟一:導入依賴
<!--activiti常規依賴-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<!--activiti和Spring整合依賴-->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<!--數據庫依賴-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--單測依賴-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.7.RELEASE</version>
</dependency>
<!-- log start -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--數據源-->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
步驟二:配置Activiti
配置內容:1.數據源 2.配置processEngine對象 3.配置XXXXService
<!--數據源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
步驟二:配置Activiti
配置內容:1.數據源 2.配置processEngine對象 3.配置XXXXService
<!--數據源-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/activiti-y2170"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--配置ProcessEngineConfiguration-->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!--數據源-->
<property name="dataSource" ref="dataSource"/>
<!--配置事務-->
<property name="transactionManager" ref="transactionManager"/>
<!--數據生成策略 true false create drop-create -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!--數據源-->
<property name="dataSource" ref="dataSource"/>
<!--配置事務-->
<property name="transactionManager" ref="transactionManager"/>
<!--數據生成策略 true false create drop-create -->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
<!--配置ProcessEngine-->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
<!--配置RepositoryService-->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<!--配置RuntimeService-->
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
<!--配置TaskService-->
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
<!--配置HistoryService-->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
<!--配置事務管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
步驟三:測試Activiti
@RunWith(SpringJUnit4ClassRunner.class) //測試方式 junit4.12+
@ContextConfiguration("classpath:activiti-spring.xml") //配置
public class ActivitiSpringTest {
@Resource
private RepositoryService repositoryService;
@Resource
private RuntimeService runtimeService;
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<!--配置RuntimeService-->
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/>
<!--配置TaskService-->
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService"/>
<!--配置HistoryService-->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService"/>
<!--配置事務管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
步驟三:測試Activiti
@RunWith(SpringJUnit4ClassRunner.class) //測試方式 junit4.12+
@ContextConfiguration("classpath:activiti-spring.xml") //配置
public class ActivitiSpringTest {
@Resource
private RepositoryService repositoryService;
@Resource
private RuntimeService runtimeService;
/**
* 測試流程部署
*/
@Test
public void deployment(){
repositoryService.createDeployment()
.addClasspathResource("amedical/medical.bpmn")
.name("測試Spring流程部署")
.deploy();
}
}
2.Activiti7的新特性
ProcessRuntime
TaskRuntaime
3.SpringBoot2整合Activiti7
步驟一:引入依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta2</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
步驟二:配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/activiti-y2170?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username : root
password : root
driver-class-name: com.mysql.jdbc.Driver
activiti:
db-history-used: true
步驟三:將SpringSecurity配置添加到項目當中
SecurityUtil.java 關於權限登陸
DemoApplicationConfiguration 關於權限配置
步驟四:啟動工程
@SpringBootApplication
public class StartActiviti {
public static void main(String[] args) {
SpringApplication.run(StartActiviti.class,args);
}
}
注意問題:
1.Activiti7和SpringSecurity耦合,需要加入SpringSecurity的依賴和配置,我們可以使用Security中的用戶角色組定義流程執行的組
2.流程默認可自動部署,但是需要再resources/processes文件夾,將流程文件放入當中
3.默認歷史表不會生成,需要手動開啟配置
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
步驟二:配置文件
spring:
datasource:
url: jdbc:mysql://localhost:3306/activiti-y2170?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username : root
password : root
driver-class-name: com.mysql.jdbc.Driver
activiti:
db-history-used: true
步驟三:將SpringSecurity配置添加到項目當中
SecurityUtil.java 關於權限登陸
DemoApplicationConfiguration 關於權限配置
步驟四:啟動工程
@SpringBootApplication
public class StartActiviti {
public static void main(String[] args) {
SpringApplication.run(StartActiviti.class,args);
}
}
注意問題:
1.Activiti7和SpringSecurity耦合,需要加入SpringSecurity的依賴和配置,我們可以使用Security中的用戶角色組定義流程執行的組
2.流程默認可自動部署,但是需要再resources/processes文件夾,將流程文件放入當中
3.默認歷史表不會生成,需要手動開啟配置
4.執行流程
@RestController
@RequestMapping("/activiti")
public class ActivitiController {
@Resource
private ProcessRuntime processRuntime;
@Resource
private TaskRuntime taskRuntime;
@Resource
private SecurityUtil securityUtil;
/**
* 查詢流程定義
*/
@RequestMapping("/getProcess")
public void getProcess(){
//查詢所有流程定義信息
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
System.out.println("當前流程定義的數量:"+processDefinitionPage.getTotalItems());
//獲取流程信息
for (ProcessDefinition processDefinition:processDefinitionPage.getContent()) {
System.out.println("流程定義信息"+processDefinition);
}
}
@RestController
@RequestMapping("/activiti")
public class ActivitiController {
@Resource
private ProcessRuntime processRuntime;
@Resource
private TaskRuntime taskRuntime;
@Resource
private SecurityUtil securityUtil;
/**
* 查詢流程定義
*/
@RequestMapping("/getProcess")
public void getProcess(){
//查詢所有流程定義信息
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
System.out.println("當前流程定義的數量:"+processDefinitionPage.getTotalItems());
//獲取流程信息
for (ProcessDefinition processDefinition:processDefinitionPage.getContent()) {
System.out.println("流程定義信息"+processDefinition);
}
}
/**
* 啟動流程示例
*/
@RequestMapping("/startInstance")
public void startInstance(){
ProcessInstance instance = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("demo").build());
System.out.println(instance.getId());
}
* 啟動流程示例
*/
@RequestMapping("/startInstance")
public void startInstance(){
ProcessInstance instance = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("demo").build());
System.out.println(instance.getId());
}
/**
* 獲取任務,拾取任務,並且執行
*/
@RequestMapping("/getTask")
public void getTask(){
securityUtil.logInAs("salaboy"); //指定組內任務人
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
if(tasks.getTotalItems()>0){
for (Task task:tasks.getContent()) {
System.out.println("任務名稱:"+task.getName());
//拾取任務
taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
//執行任務
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());
}
}
}
}
* 獲取任務,拾取任務,並且執行
*/
@RequestMapping("/getTask")
public void getTask(){
securityUtil.logInAs("salaboy"); //指定組內任務人
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10));
if(tasks.getTotalItems()>0){
for (Task task:tasks.getContent()) {
System.out.println("任務名稱:"+task.getName());
//拾取任務
taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());
//執行任務
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());
}
}
}
}