一、pom
<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.badcat</groupId> <artifactId>activiti_demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>activiti_demo</name> <description>springboot2.1.6整合activiti6.0</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <maven-jar-plugin.version>3.0.0</maven-jar-plugin.version> <druid.version>1.1.14</druid.version> <mysql.version>8.0.16</mysql.version> <activiti.starter.version>6.0.0</activiti.starter.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--阿里數據庫連接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- activiti --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>${activiti.starter.version}</version> </dependency> <!-- SpringBoot 測試 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
二、application.yml
server:
port: 8087
tomcat:
uri-encoding: UTF-8
spring:
datasource:
url: jdbc:mysql://localhost/activiti6?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true&nullCatalogMeansCurrent=true
username: root
password: 111111
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
# 下面為連接池的補充設置,應用到上面所有數據源中
# 初始化大小,最小,最大
initial-size: 5
min-idle: 5
max-active: 20
# 配置獲取連接等待超時的時間
max-wait: 60000
# 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒
time-between-eviction-runs-millis: 60000
# 配置一個連接在池中最小生存的時間,單位是毫秒
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打開PSCache,並且指定每個連接上PSCache的大小
pool-prepared-statements: true
# 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆
max-pool-prepared-statement-per-connection-size: 20
filters: stat,wall
use-global-data-source-stat: true
# 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
activiti:
check-process-definitions: false
#flase: 默認值。activiti在啟動時,會對比數據庫表中保存的版本,如果沒有表或者版本不匹配,將拋出異常。(生產環境常用)
#true: activiti會對數據庫中所有表進行更新操作。如果表不存在,則自動創建。(開發時常用)
#create_drop: 在activiti啟動時創建表,在關閉時刪除表(必須手動關閉引擎,才能刪除表)。(單元測試常用)
#rop-create: 在activiti啟動時刪除原來的舊表,然后在創建新表(不需要手動關閉引擎)。
database-schema-update: true
三、Aplication.java
注意:@SpringBootApplication 后添加 exclude = {SecurityAutoConfiguration.class }
package com.badcat; import org.activiti.spring.boot.SecurityAutoConfiguration; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 啟動程序 */ @SpringBootApplication(exclude = {SecurityAutoConfiguration.class }) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
四、運行Aplication.java,發現數據庫多出了28張表
五、創建config類
import org.activiti.engine.*; import org.activiti.spring.ProcessEngineFactoryBean; import org.activiti.spring.SpringProcessEngineConfiguration; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; /** * @author badcat * Date 2021/3/10 * Time 16:01 */ @Configuration public class ActivitiConfig { @Autowired private DataSource dataSource; @Autowired private PlatformTransactionManager platformTransactionManager; private SpringProcessEngineConfiguration springProcessEngineConfiguration(){ SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration(); spec.setDataSource(dataSource); spec.setTransactionManager(platformTransactionManager); spec.setDatabaseSchemaUpdate("true"); return spec; } private 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(); } @Bean public FormService formService() throws Exception{ return processEngine().getObject().getFormService(); } }
六、創建測試類
其中BPMN/process.bpmn是提前准備的流程定義文import org.activiti.engine.RepositoryServicimport org.activiti.engine.repository.Deployment;
import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * @author badcat * Date 2021/3/10 * Time 16:09 */ @RunWith(SpringRunner.class) @SpringBootTest public class Deployment_test { @Autowired private RepositoryService repositoryService; @Test public void initDeploymentBPMN(){ String filename="BPMN/process.bpmn"; Deployment deployment=repositoryService.createDeployment() .addClasspathResource(filename) .deploy(); System.out.println(deployment.getId());
}
}
運行就可以看到數據庫中的數據了。