第二章 activiti “开发环境搭建训练营”

一、"工具箱"准备------开发环境四件套

1. 基础装备清单
工具名称 版本要求 作用
JDK 1.8+ 运行Java程序
Maven 3.6+ 依赖管理与项目构建
IDE Eclipse/IDEA 代码编写与调试
数据库 H2/MySQL 5.7+ 存储流程数据(H2适合快速入门)

验证安装

bash 复制代码
java -version  # 输出:java version "1.8.0_301"  
mvn -v        # 输出:Apache Maven 3.8.4  

二、创建"引擎车间"------Maven项目搭建

1. 生成项目骨架
bash 复制代码
mvn archetype:generate -DgroupId=com.activiti.lab -DartifactId=activiti-lab -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false  
2. 添加"动力燃料"------Maven依赖

pom.xml中注入Activiti核心依赖:

xml 复制代码
<dependency>  
    <groupId>org.activiti</groupId>  
    <artifactId>activiti-engine</artifactId>  
    <version>5.22.0</version> <!-- 原书示例版本 -->  
</dependency>  
<dependency>  
    <groupId>com.h2database</groupId>  
    <artifactId>h2</artifactId>  
    <version>1.4.200</version> <!-- 内存数据库,免安装 -->  
</dependency>  

编译命令

bash 复制代码
mvn clean install  # 构建成功即表示依赖就绪  

三、配置"能源核心"------数据库连接

1. 创建activiti.cfg.xml文件
xml 复制代码
<beans xmlns="http://www.springframework.org/schema/beans"...>  
    <!-- 数据库配置 -->  
    <bean id="dataSource" class="org.h2.jdbcx.JdbcDataSource">  
        <property name="URL" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"/>  
        <property name="user" value="sa"/>  
        <property name="password" value=""/>  
    </bean>  

    <!-- 流程引擎配置 -->  
    <bean id="processEngineConfiguration"  
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">  
        <property name="dataSource" ref="dataSource"/>  
        <property name="databaseSchemaUpdate" value="true"/> <!-- 自动建表 -->  
    </bean>  
</beans>  

关键参数解析

  • databaseSchemaUpdate=true:启动时自动创建或更新表结构,开发环境神器

四、启动"引擎点火"------初始化流程引擎

1. Java代码初始化
java 复制代码
public class EngineStarter {  
    public static void main(String[] args) {  
        // 加载activiti.cfg.xml配置  
        ProcessEngine engine = ProcessEngineConfiguration  
            .createProcessEngineConfigurationFromResource("activiti.cfg.xml")  
            .buildProcessEngine();  

        System.out.println("Activiti引擎启动成功!版本:" + engine.VERSION);  
        System.out.println("自动创建表数量:" + engine.getManagementService()  
            .getTableCount().getTables().size());  
    }  
}  
2. 运行结果验证
text 复制代码
Activiti引擎启动成功!版本:5.22.0  
自动创建表数量:28  # 看到此数字说明数据库表创建成功  

趣味问答❓

Q:如果databaseSchemaUpdate设为false会怎样?

A:引擎启动失败,提示表不存在!需要手动执行SQL脚本初始化数据库。


五、"初号机"测试------部署并运行第一个流程

1. 创建BPMN文件

src/main/resources下新建leave.bpmn(流程定义文件,第三章详解)。

2. 代码部署与启动流程
java 复制代码
RepositoryService repositoryService = engine.getRepositoryService();  
// 部署流程图  
Deployment deployment = repositoryService.createDeployment()  
    .addClasspathResource("leave.bpmn")  
    .deploy();  

RuntimeService runtimeService = engine.getRuntimeService();  
// 启动流程实例  
ProcessInstance instance = runtimeService.startProcessInstanceByKey("leaveProcess");  
System.out.println("流程实例ID:" + instance.getId());  

预期输出

text 复制代码
流程实例ID:2501  # 表示第一个流程实例已启动  

六、避坑指南------环境搭建常见"雷区"

1. 依赖冲突

症状ClassNotFoundExceptionNoSuchMethodError
解法 :用mvn dependency:tree排查冲突,排除重复依赖。

2. 数据库连接失败

症状Connection refusedUnknown database
检查项

  • H2的URL格式是否正确(jdbc:h2:mem:activiti)。
  • MySQL用户权限是否开放远程连接。

七、课后挑战------巩固你的"车间"

  1. 选择题databaseSchemaUpdate参数设置为false时,如何初始化表结构?

    A. 手动执行activiti.mysql.create.sql

    B. 引擎自动创建

    C. 不需要表结构

  2. 实战题 :尝试将数据库切换为MySQL,修改activiti.cfg.xml配置并成功启动引擎。


相关推荐
有趣灵魂1 分钟前
Java-Spingboot根据HTML模板和动态数据生成PDF文件
java·pdf·html
BIBI20495 分钟前
Windows 上配置 Nacos Server 3.x.x 使用 MySQL 5.7
java·windows·spring boot·后端·mysql·nacos·配置
一雨方知深秋8 分钟前
面向对象高级语法 1-- 继承、多态
java·方法重写·继承extends·子类构造器调用父类构造器·兄弟构造器this·对象、行为多态·解耦合父类变量为形参接子类对象
月明长歌13 分钟前
【码道初阶】Leetcode771 宝石与石头:Set 判成员 vs List 判成员(同题两种写法的差距)
java·数据结构·leetcode·list·哈希算法·散列表
xiaoyustudiowww13 分钟前
Jakarta EE 12(JAVA EE12)平台包含规范版本
java·java-ee
wniuniu_13 分钟前
ceph的参数
java·数据库·ceph
AC赳赳老秦19 分钟前
DeepSeek-Coder vs Copilot:嵌入式开发场景适配性对比实战
java·前端·后端·struts·mongodb·copilot·deepseek
Oxye26 分钟前
服务器内存不足导致程序没完全起起来,报错Required type must not be null
java·开发语言
2501_9167665428 分钟前
【Java】static关键字与类的加载顺序
java·开发语言
9号达人32 分钟前
支付配置时好时坏?异步方法里的对象引用坑
java·后端·面试