一、技术栈选型与架构设计
在构建企业级Java应用时,选择合适的技术栈至关重要。Spring MVC作为轻量级Web框架,提供清晰的MVC分层架构;MyBatis作为半自动ORM框架,兼顾灵活性与性能;Activiti作为开源工作流引擎,支持BPMN 2.0标准规范。三者组合可形成从前端请求处理到业务逻辑执行,再到流程管理的完整技术闭环。
典型四层架构设计包含:
- 表现层:Spring MVC控制器处理HTTP请求,通过注解配置路由(@Controller/@RequestMapping)
- 业务层:Service组件封装核心业务逻辑,配合事务管理(@Transactional)
- 持久层:MyBatis Mapper接口与XML映射文件实现数据持久化
- 流程层:Activiti引擎驱动业务流程,通过RepositoryService部署流程定义,RuntimeService管理流程实例
二、Spring MVC核心配置实践
1. 环境搭建与依赖管理
推荐使用Maven构建项目,核心依赖配置示例:
<dependencies><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.20</version></dependency><!-- MyBatis集成 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency><!-- Activiti引擎 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.1.0.M6</version></dependency></dependencies>
2. 关键组件配置
- DispatcherServlet配置:在web.xml中配置前端控制器,或通过Java Config方式注册
- 视图解析器:配置FreeMarker或Thymeleaf模板引擎
- 异常处理:通过@ControllerAdvice实现全局异常捕获
- 数据验证:集成Hibernate Validator实现JSR-303验证规范
三、MyBatis持久层开发进阶
1. 动态SQL构建技巧
MyBatis提供、、等标签实现复杂查询:
<select id="findUsers" resultType="User">SELECT * FROM sys_user<where><if test="name != null">AND user_name LIKE #{name}%</if><if test="status != null">AND status = #{status}</if><if test="deptIds != null">AND dept_id IN<foreach collection="deptIds" item="id" open="(" separator="," close=")">#{id}</foreach></if></where></select>
2. 高级映射特性
- 一对一关联:通过实现对象嵌套
- 一对多关联:使用处理集合类型
- 延迟加载:配置lazyLoadingEnabled优化性能
- 存储过程调用:通过标签的statementType=”CALLABLE”实现
四、Activiti工作流深度集成
1. 流程建模与部署
使用Activiti Modeler设计BPMN流程图,重点掌握:
- 用户任务:指定流程执行人(assignee)
- 网关:配置排他网关(Exclusive Gateway)实现条件分支
- 服务任务:调用JavaDelegate实现自定义业务逻辑
- 子流程:实现流程模块化设计
部署流程的两种方式:
// 方式1:通过ZIP包部署repositoryService.createDeployment().addClasspathResource("processes/expense.bpmn20.xml").deploy();// 方式2:动态创建流程定义BpmnModel model = new BpmnModel();Process process = new Process();model.addProcess(process);repositoryService.createDeployment().addBpmnModel("dynamic-process.bpmn", model).deploy();
2. 运行时流程管理
核心API操作示例:
// 启动流程实例runtimeService.startProcessInstanceByKey("expenseProcess");// 查询任务列表List<Task> tasks = taskService.createTaskQuery().taskAssignee("zhangsan").list();// 完成任务taskService.complete(taskId, variables);// 流程实例监控ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();
3. 高级特性实现
- 会签处理:通过MultiInstanceLoopCharacteristics配置多实例任务
- 流程版本控制:使用DeploymentBuilder的enableDuplicateFiltering()方法
- 历史数据查询:通过HistoryService获取流程执行轨迹
- 异步任务:配置AsyncExecutor实现异步执行
五、企业级应用开发实践
1. 三框架集成方案
配置Activiti与Spring事务管理:
@Configurationpublic class ActivitiConfig {@Beanpublic SpringProcessEngineConfiguration processEngineConfiguration(DataSource dataSource, PlatformTransactionManager transactionManager) {return new SpringProcessEngineConfiguration().setDataSource(dataSource).setTransactionManager(transactionManager).setDatabaseSchemaUpdate("true").setAsyncExecutorActivate(false);}}
2. 典型业务场景实现
请假流程示例:
- 员工提交申请(表单数据绑定到流程变量)
- 自动路由至直属领导审批
- 根据金额阈值触发财务会签
- 审批通过后更新HR系统状态
- 发送审批结果通知
3. 性能优化策略
- 数据库优化:配置合适的索引策略,使用连接池
- 异步处理:将耗时操作放入消息队列
- 缓存机制:对频繁查询的流程定义使用二级缓存
- 集群部署:配置流程引擎集群模式
六、开发调试与运维技巧
- 日志配置:通过logback.xml调整各框架日志级别
- 流程图渲染:集成Activiti Modeler实现可视化监控
- 热部署方案:使用JRebel实现代码修改即时生效
- 版本回滚:通过流程定义ID实现流程实例迁移
本技术方案通过系统化的知识架构和丰富的实践案例,帮助开发者全面掌握三大框架的集成开发能力。从基础环境搭建到复杂业务场景实现,每个技术点都配备可运行的代码示例和配置说明,特别适合需要快速构建企业级工作流系统的开发团队参考使用。