当前位置: 首页 > news >正文

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-definitionstrue / false是否自动检查 processes/ 目录下的流程定义文件
process-definition-location-prefixclasspath*:/processes/流程定义文件的加载路径
process-definition-location-suffixes默认.bpmn20.xml或.bpmn流程定义文件后缀
db-identity-usedtrue / false是否使用Activiti的身份表
database-schema-updatetrue / false数据库更新策略,是否自动生成工作流相关表
history-levelnone / activity / audit / full1、none :不保存任何历史数,仅需流程流转,不关心历史数据,性能最优。2、activity:仅记录流程实例和活动实例(开始/结束时间),用于基础流程追踪,性能较低。3、audit:activity级别 + 记录任务表单属性、用户任务分配信息,用于需要审计追踪的常规业务,性能中等。4、full:audit级别 + 记录所有细节(包括变量修改、任务事件等),用于需要完整历史记录的复杂业务流程,性能较高。
use-strong-uuidstrue / 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-activatetrue / 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.comSMTP 服务器地址
mail-server-port非加密:25(默认)/ SSL加密:465 / TLS加密:587SMTP 服务器端口
mail-server-use-ssltrue / false是否启用SSL加密连接,ture为完全加密,端口通常为465
mail-server-use-tlstrue / 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;
    }
}

相关文章:

  • 深入理解C++面向对象特性之一 多态
  • Linux驱动开发进阶(六)- 多线程与并发
  • Redis到底能不能做主数据库?
  • xv6-labs-2024 lab1
  • QML面试笔记--UI设计篇03导航控件
  • 国内数据安全传送简述
  • python 微信小程序支付、查询、退款使用wechatpy库
  • 神经探针与价值蓝海:AI重构需求挖掘的认知拓扑学
  • 深度学习 Deep Learning 第19章 近似推理
  • 基于SpringBoot的在线拍卖系统(源码+数据库+万字文档+ppt)
  • 【LeetCode 题解】算法:34.在排序数组中查找元素的第一个和最后一个位置
  • Kafka 中的 offset 提交问题
  • Qt 资源文件(.qrc 文件)
  • 基于SpringBoot的“高校社团管理系统”的设计与实现(源码+数据库+文档+PPT)
  • 基于ensp的mpls的解决bgp域内黑洞及MPLS VPN的应用
  • 心脏滴血漏洞(CVE-2014-0160)漏洞复现
  • 探秘PythonJSON解析深度剖析json.loads处理嵌套JSON字符串的奥秘
  • 《UNIX网络编程卷1:套接字联网API》第3章 套接字编程简介
  • MBR的 扩展分区 和 逻辑分区 笔记250407
  • 循环神经网络 - 机器学习任务之同步的序列到序列模式
  • 泽连斯基已离开土耳其安卡拉
  • 马上评|清理“滥竽充数者”,为医者正名
  • 夜读丨母亲为燕子打开家门
  • 国防部:菲方应停止一切侵权挑衅危险举动,否则只会自食苦果
  • 著名词作家陈哲逝世,代表作《让世界充满爱》《同一首歌》等
  • 李家超:明日起香港特区护照持有人可免签入境阿联酋