Spring Boot 整合 Activiti 实战指南

版权申诉
0 下载量 28 浏览量 更新于2024-08-03 收藏 111KB DOCX 举报
"在Spring Boot项目中集成Activiti工作流引擎的实践指南" 在Spring Boot项目中使用Activiti,首先需要在项目初始化时选择包含Activiti的Starter依赖,或者手动在已有项目中添加相关依赖。以下是可能的依赖配置: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-bpm2</artifactId> </dependency> ``` 数据源和Activiti的配置通常在`application.yml`或`application.properties`中完成。例如: ```yaml spring: activiti: process-definition-location-prefix: classpath:/processes/ process-definition-location-suffixes: - .bpmn20.xml ``` 这里的`process-definition-location-prefix`指定了流程定义文件的路径前缀,而`process-definition-location-suffixes`则列出了流程定义文件的默认后缀名,如`.bpmn20.xml`。 在Spring Boot中,由于自动配置的存在,配置完成后,Activiti的各种服务如流程引擎(ProcessEngine)、任务服务(TaskService)等会自动注册到Spring容器中,可以直接通过@Autowired注解来使用。 对于Spring MVC的配置,需要确保静态资源和视图解析正常。例如,如果你使用Thymeleaf作为视图解析器,配置可能如下: ```java @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/").addResourceLocations("/resources/"); } @Bean public ThymeleafViewResolver viewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); resolver.setCharacterEncoding("UTF-8"); return resolver; } @Bean public SpringTemplateEngine templateEngine() { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.setEnableSpringELCompiler(true); engine.addDialect(new SpringStandardDialect()); return engine; } } ``` 在实际业务流程中,比如请假流程,流程的发起者(员工)会触发流程: ```java @Service public class VacationService { @Autowired private RuntimeService runtimeService; public void startVacationProcess(Vacation vacation) { Map<String, Object> variables = new HashMap<>(); variables.put("vacationInfo", vacation); runtimeService.startProcessInstanceByKey("vacationProcess", variables); } } ``` 审批者(老板)则可以通过查询自己的待办任务来审批请假申请: ```java @Service public class AuditService { @Autowired private TaskService taskService; public List<VacTask> queryMyAudits(String userName) { List<Task> taskList = taskService.createTaskQuery().taskCandidateUser(userName).orderByTaskCreateTime().desc().list(); // 可能需要处理多个用户组的情况,但此处简化为只处理当前用户 // Group group = identityService.createGroupQuery().groupMember(userName).singleResult(); // List<Task> list = taskService.createTaskQuery().taskCandidateGroup(group.getId()).list(); // taskList.addAll(list); List<VacTask> vacTaskList = new ArrayList<>(); for (Task task : taskList) { // 将任务转换为业务对象 VacTask vacTask = new VacTask(task); vacTaskList.add(vacTask); } return vacTaskList; } public void approveVacation(Task task, ApprovalResult result) { taskService.complete(task.getId(), Collections.singletonMap("approvalResult", result)); } } ``` 以上代码展示了如何在Spring Boot中与Activiti集成,启动流程、查询待办任务以及审批操作。实际应用中,可能还需要处理更多细节,例如异常处理、事务管理、自定义表单及权限控制等。同时,前端通常会通过Ajax请求获取数据,利用AngularJS或其他前端框架处理展示和交互逻辑。