Activiti 作為優秀的工作流引擎,其官方 Web 流程設計器 (Activiti Modeler) 為業務人員提供了可視化建模能力。本文詳細講解 Modeler 5.21.0 版本的兩種整合模式:獨立部署模式與SSM 框架集成模式,幫助你快速落地流程設計功能。
| 維度 | 獨立部署模式 | SSM 集成模式 |
|---|---|---|
| 部署架構 | Modeler 獨立 WAR 包部署 | Modeler 整合進業務 WAR 包 |
| 數據庫 | 獨立數據源 (H2/MySQL) | 共用業務數據源 |
| 用戶體系 | 獨立認證/單點登錄對接 | 複用業務 Shiro/Spring Security |
| 模型存儲 | Modeler 自己的表 | 共用 ACT_RE_MODEL 等表 |
| 優勢 | 解耦、獨立升級、多系統共享 | 開發簡單、事務一致、無跨域 |
| 適用場景 | 多業務系統共享設計器、獨立維護團隊 | 單一業務系統、快速交付、資源受限 |
# 官方下載地址 (需註冊)
https://www.activiti.org/download-links
# 或從 GitHub 獲取 5.21.0 標簽
git clone https://github.com/Activiti/Activiti.git
cd Activiti
git checkout activiti-5.21.0
# activiti-modeler/src/main/webapp/editor/app-cfg.js
// 後端 REST API 根路徑
var ACTIVITI_MODELER_CONFIG = {
contextRoot: '/activiti-modeler', // 部署上下文路徑
restRoot: '/activiti-rest', // activiti-rest 部署路徑
// ... 其他配置
};
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/activiti?useSSL=false&serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/*.xml</param-value>
</context-param>
cd activiti-modeler
mvn clean package -DskipTests
# 生成 activiti-modeler.war 部署到 Tomcat
<dependencies>
<!-- Activiti 核心 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.21.0</version>
</dependency>
<!-- Modeler 相關 (需從官方包手動安裝或私服) -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-modeler</artifactId>
<version>5.21.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-rest</artifactId>
<version>5.21.0</version>
</dependency>
<!-- JSON 處理 (Modeler 依賴) -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
# 從 activiti-modeler.war 解壓並拷貝到項目
src/main/webapp/editor/ # 核心編輯器頁面
src/main/webapp/stencilset/ # BPMN 2.0 模板定義
src/main/webapp/editor/app-cfg.js # 配置文件 (需修改 contextRoot 為項目路徑)
<mvc:resources mapping="/editor/**" location="/editor/"/>
<mvc:resources mapping="/stencilset/**" location="/stencilset/"/>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="databaseSchemaUpdate" value="true"/>
<property name="jobExecutorActivate" value="true"/>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration"/>
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/>
<bean id="modelService" factory-bean="processEngine" factory-method="getModelService"/>
# Nginx 反向代理配置
location /activiti-modeler/ {
proxy_pass https://modeler-server:8080/activiti-modeler/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /activiti-rest/ {
proxy_pass https://rest-server:8080/activiti-rest/;
}
# 或者 Spring Boot CorsConfiguration
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("https://localhost:8080")
.allowedMethods("*")
.allowCredentials(true);
}
}
# 方案一:CAS 統一認證
# 方案二:JWT Token 傳遞
# Modeler 請求攜帶 Token,後端過濾器驗證並設置 SecurityContext
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) {
String token = request.getHeader("Authorization");
if (StringUtils.hasText(token) && token.startsWith("Bearer ")) {
String jwt = token.substring(7);
if (jwtUtil.validateToken(jwt)) {
Authentication auth = jwtUtil.getAuthentication(jwt);
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
filterChain.doFilter(request, response);
}
}
# 1. 確保數據庫表字符集 utf8mb4
# 2. Java 環境設置 -Dfile.encoding=UTF-8
# 3. Modeler 導出圖片字體配置
# activiti-modeler/WEB-INF/classes/stencilset/bpmn2.0/jbpm/fonts.properties
# 替換為支持中文字體 (如微軟雅黑、思源黑體)
https://host:port/activiti-modeler/editor.html (獨立) 或 https://host:port/editor.html (集成)Activiti Modeler 整合的核心在於 靜態資源正確加載、REST API 路徑映射、用戶認證體系統一、數據庫表結構共享 四大支柱。根據團隊規模、系統架構、維護成本選擇合適模式,並建立標準化的流程建模→發布→運行→監控全鏈路規範,才能真正發揮工作流引擎的業務價值。