Activiti(二)- 基于SpringBoot开发配置activiti相关配置项
1、引言
Activiti是一个轻量级的工作流和业务流程管理(BPM)平台,与Spring Boot的集成可以大大简化工作流应用的开发。本文将介绍如何在Spring Boot项目中配置Activiti相关配置项,快速搭建工作流系统。
2、环境准备
在开始配置activiti相关配置项之前,引入一下相关依赖,如下所示:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>****</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>****</version>
</dependency>
</dependencies>
3、基础配置
3.1、数据源配置(以MySQL为例)
Activiti需要数据库支持来存储流程定义和运行时数据,在application.properties或application.yml文件中配置一下信息(以.yml文件为例):
spring:
datasource:
driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://Ip:Port/schema?autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true
username: ***
password: ***
3.2、Activiti核心配置
spring:
activiti:
check-process-definitions: true
process-definition-location-prefix: classpath:/processes/
process-definition-location-suffixes: "**.bpmn20.xml,**.bpmn"
db-identity-used: true
database-schema-update: true
history-level: audit
use-strong-uuids: true
配置项 | 参数 | 说明 |
---|---|---|
check-process-definitions | true / false | 是否自动检查 processes/ 目录下的流程定义文件 |
process-definition-location-prefix | classpath*:/processes/ | 流程定义文件的加载路径 |
process-definition-location-suffixes | 默认.bpmn20.xml或.bpmn | 流程定义文件后缀 |
db-identity-used | true / false | 是否使用Activiti的身份表 |
database-schema-update | true / false | 数据库更新策略,是否自动生成工作流相关表 |
history-level | none / activity / audit / full | 1、none :不保存任何历史数,仅需流程流转,不关心历史数据,性能最优。2、activity:仅记录流程实例和活动实例(开始/结束时间),用于基础流程追踪,性能较低。3、audit:activity级别 + 记录任务表单属性、用户任务分配信息,用于需要审计追踪的常规业务,性能中等。4、full:audit级别 + 记录所有细节(包括变量修改、任务事件等),用于需要完整历史记录的复杂业务流程,性能较高。 |
use-strong-uuids | true / false | 是否使用强UUID |
3.3、Activiti异步执行器配置
spring:
activiti:
async-executor-activate: true
async-executor-core-pool-size: 2
async-executor-max-pool-size: 10
async-executor-queue-capacity: 100
async-executor-thread-keep-alive-time: 30
async-executor-thread-name-prefix: activiti-async-
配置项 | 参数 | 说明 |
---|---|---|
async-executor-activate | true / false | 是否启用异步执行器(负责处理定时任务、异步任务等后台操作) |
async-executor-core-pool-size | 根据系统负载调整(通常 CPU核心数 + 1) | 线程池的核心线程数(即使空闲也不会销毁的线程数量) |
async-executor-max-pool-size | 一般不超过 50,避免线程竞争导致性能下降,高并发场景需结合 queue-capacity 调整 | 线程池的最大线程数(当队列满时,可创建的最大线程数) |
async-executor-queue-capacity | 短任务(如邮件发送):100-500,长任务(如复杂计算):适当调小(如 50),避免任务积压 | 任务队列的容量(超出核心线程数时,任务先进入队列) |
async-executor-thread-keep-alive-time | 默认值:30,突发流量场景:调大(如 60),避免频繁创建线程,稳定负载场景:保持默认或更小(如 10) | 非核心线程的空闲存活时间(秒),超时后销毁 |
async-executor-thread-name-prefix | 默认值:activiti-async-,按需修改(如 bpm-async-),与其他线程区分开 | 异步线程的名称前缀(便于日志监控和线程追踪) |
3.4、Activiti邮件服务器配置
spring:
activiti:
mail-server-host: smtp.163.com
mail-server-port: 25
mail-server-use-ssl: false
mail-server-use-tls: true
mail-server-username: admin@example.com
mail-server-password: password
mail-server-default-from: activiti@example.com
配置项 | 参数 | 说明 |
---|---|---|
mail-server-host | 如:smtp.163.com | SMTP 服务器地址 |
mail-server-port | 非加密:25(默认)/ SSL加密:465 / TLS加密:587 | SMTP 服务器端口 |
mail-server-use-ssl | true / false | 是否启用SSL加密连接,ture为完全加密,端口通常为465 |
mail-server-use-tls | true / false | 是否启用TLS加密(推荐),端口为587时必须启用 |
mail-server-username | 如:admin@example.com | 邮箱登录账号 |
mail-server-password | 如:password | 邮箱密码或授权码,若使用第三方邮箱(如Gmail、163),需填写客户端授权码而非登录密码 |
mail-server-default-from | 如:activiti@example.com | 默认发件人地址,若流程中未指定发件人,则使用该地址。需与userName一致(否则可能被服务器拒绝) |
3.5、Activiti自定义配置类
对于更复杂的配置,可以创建自定义配置类,如下所示:
@Configuration // 标记为Spring配置类
public class ActivitiConfig {
/**
* 创建Activiti流程引擎配置
* @param dataSource 数据源(由Spring自动注入)
* @param transactionManager 事务管理器(由Spring自动注入)
*/
@Bean
public ProcessEngineConfiguration processEngineConfiguration(
DataSource dataSource,
PlatformTransactionManager transactionManager) {
// 创建Spring环境下的流程引擎配置
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
// 必需配置:数据源和事务管理器
config.setDataSource(dataSource);
config.setTransactionManager(transactionManager);
// 数据库Schema更新策略(自动创建/更新表结构)
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 启用异步执行器(后台任务处理)
config.setAsyncExecutorActivate(true);
// 设置历史记录级别为AUDIT(记录任务和流程实例信息)
config.setHistoryLevel(HistoryLevel.AUDIT);
// TODO: 可自定义ID生成策略(默认已使用StrongUuidGenerator)
config.setIdGenerator(new StrongUuidGenerator());
// TODO: 替换为自定义ID生成器(如雪花算法)
config.setIdGenerator(new CustomSnowflakeIdGenerator());
// TODO: 可扩展字体配置(解决流程图中文乱码),需确保服务器已安装对应字体。
config.setActivityFontName("宋体");
config.setLabelFontName("宋体");
config.setAnnotationFontName("宋体");
// TODO: 配置邮件服务(用于任务通知)
config.setMailServerHost("SMTP 服务器地址");
config.setMailServerUsername("邮箱登录账号");
config.setMailServerPassword("邮箱密码或授权码,若使用第三方邮箱(如Gmail、163),需填写客户端授权码而非登录密码");
// TODO: 启用二级缓存(高频查询场景)
config.setProcessDefinitionCache(new CustomProcessDefinitionCache());
// TODO: 添加流程执行拦截器
config.setCommandInterceptors(Arrays.asList(new LoggingCommandInterceptor(),new CustomAuditInterceptor()));
// TODO: 多租户支持(需配置tenantId字段)
config.setTenantIdProvider(new CustomTenantIdProvider());
// TODO: 根据实际业务需要添加其它相关配置项
······
return config;
}
/**
* 创建流程引擎FactoryBean(由Spring管理生命周期)
* @param config 上一步定义的配置
*/
@Bean
public ProcessEngineFactoryBean processEngine(ProcessEngineConfiguration config) {
ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
factoryBean.setProcessEngineConfiguration(config);
return factoryBean;
}
}
3.6、Activiti多数据源配置
在实际项目中,可能需要将Activiti的表单独放在一个数据源中,可参考以下示例:
@Configuration
@EnableTransactionManagement
public class MultiDataSourceConfig {
// Activiti数据源
@Bean(name = "activitiDataSource")
@ConfigurationProperties(prefix = "spring.activiti.datasource")
public DataSource activitiDataSource() {
return DataSourceBuilder.create().build();
}
// 业务数据源
@Bean(name = "businessDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource businessDataSource() {
return DataSourceBuilder.create().build();
}
// Activiti事务管理器
@Bean(name = "activitiTransactionManager")
public PlatformTransactionManager activitiTransactionManager(
@Qualifier("activitiDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
// Activiti流程引擎配置
@Bean
public SpringProcessEngineConfiguration processEngineConfiguration(
@Qualifier("activitiDataSource") DataSource dataSource,
@Qualifier("activitiTransactionManager") PlatformTransactionManager transactionManager) {
SpringProcessEngineConfiguration config = new SpringProcessEngineConfiguration();
config.setDataSource(dataSource);
config.setTransactionManager(transactionManager);
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 其他配置...
return config;
}
}