springboot集成activiti6工作流程实战

本文章代码对应的版本springboot1.5.9,activiti6.0,开发工具idea.

官网文档地址http://www.mossle.com/docs/activiti/index.html

官网对应的activiti.war包可直接下载部署到tomcat上启动,但是对应项目自身的业务操作不能用给定的前端页面操作,所以需要对应的开发集成.

1.idea安装activiti插件actiBPM,安装重启

2.引入activiti对应的maven包

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
        </dependency>

3.配置resources

server:
  port: 8081
spring:
  ###datascource
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/db_activiti?useUnicode=true&characterEncoding=utf-8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
#    type: com.alibaba.druid.pool.DruidDataSource
  activiti:
    database-schema-update: true
    check-process-definitions: true
    process-definition-location-prefix: classpath:/process/
    history-level: full          #配置流程记录级别  none  activiti audit full
    #db-history-used: true
    db-identity-used: false

4.resources下新建文件夹process,右击新建.bpmn文件

5.拖拽右侧工具画流程(这里就不讲具体的使用)

6.创建后续所需的服务

  • RepositoryService:提供一系列管理流程部署和流程定义的API。
  • RuntimeService:在流程运行时对流程实例进行管理与控制。
  • TaskService:对流程任务进行管理,例如任务提醒、任务完成和创建任务等。
  • IdentityService:提供对流程角色数据进行管理的API,这些角色数据包括用户组、用户及它们之间的关系。
  • ManagementService:提供对流程引擎进行管理和维护的服务。
  • HistoryService:对流程的历史数据进行操作,包括查询、删除这些历史数据。
  • FormService:表单服务。
@Configuration
public class ActivitiConfig {

    @Value("${spring.activiti.database-schema-update}")
    private String databaseSchemaUpdate;

    @Value("${spring.activiti.db-identity-used}")
    private boolean dbIdentityUsed;

    @Value("${spring.datasource.url}")
    private String dbUrl;

    @Bean
    public ProcessEngine processEngine(DataSourceTransactionManager transactionManager, DataSource dataSource) throws IOException {
        SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
        /**
         *  自动部署已有的流程文件
         *  作用相当于 (据bpmn文件部署流程repositoryService.createDeployment().addClasspathResource("singleAssignee.bpmn").deploy();)
         */
        Resource[] resources = new PathMatchingResourcePatternResolver().getResources(ResourceLoader.CLASSPATH_URL_PREFIX + "processes/*.bpmn");
        configuration.setTransactionManager(transactionManager);
        //设置数据源
        configuration.setDataSource(dataSource);
        //是否每次都更新数据库
        //configuration.setDatabaseSchemaUpdate(databaseSchemaUpdate);
        configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE);
        //configuration.setAsyncExecutorActivate(false);
        configuration.setDeploymentResources(resources);
        //设置是否使用activti自带的用户体系
        configuration.setDbIdentityUsed(dbIdentityUsed);
        return configuration.buildProcessEngine();
    }


    /**
     * 工作流仓储服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine) {
        return processEngine.getRepositoryService();
    }


    /**
     * 工作流运行服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine) {
        return processEngine.getRuntimeService();
    }


    /**
     * 工作流任务服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public TaskService taskService(ProcessEngine processEngine) {
        return processEngine.getTaskService();
    }


    /**
     * 工作流历史数据服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public HistoryService historyService(ProcessEngine processEngine) {
        return processEngine.getHistoryService();
    }


    /**
     * 工作流管理服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public ManagementService managementService(ProcessEngine processEngine) {
        return processEngine.getManagementService();
    }


    /**
     * 工作流唯一服务
     *
     * @param processEngine
     * @return
     */
    @Bean
    public IdentityService identityService(ProcessEngine processEngine) {
        return processEngine.getIdentityService();
    }
}

7.启动类加对应注解(不加会出现报错,一大坑)

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)

此时,启动服务,无保报错则启动成功.同时数据库会生成24张对应表,即完成基本的集成.

processEngine是流程引擎核心,整个流程的关键所在.下一节主要讲常用流程的实现.

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是集成 Spring Boot 和 Activiti 7 的步骤流程: 1. 添加 Maven 依赖 在 pom.xml 文件中添加以下 Maven 依赖: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>7.1.0.M5</version> </dependency> ``` 2. 配置数据库连接 在 application.properties 文件中配置数据库连接信息: ```properties spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&useSSL=false spring.datasource.username=root spring.datasource.password=root ``` 3. 配置 Activiti 7 在 application.properties 文件中添加以下 Activiti 7 配置信息: ```properties # Activiti 7 配置 spring.activiti.database-schema-update=true spring.activiti.history-level=full spring.activiti.check-process-definitions=true ``` 4. 创建 BPMN 文件 在 src/main/resources 目录下创建一个 myProcess.bpmn 文件,用于定义流程。 5. 创建 Service 类 创建一个 Service 类,用于操作 Activiti 7 流程引擎。例如: ```java @Service public class ProcessService { @Autowired private ProcessEngine processEngine; // 启动流程实例 public void startProcess(String processDefinitionKey, Map<String, Object> variables) { RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables); } // 查询任务列表 public List<Task> getTaskList(String assignee) { TaskService taskService = processEngine.getTaskService(); List<Task> taskList = taskService.createTaskQuery().taskAssignee(assignee).orderByTaskCreateTime().asc().list(); return taskList; } // 完成任务 public void completeTask(String taskId, Map<String, Object> variables) { TaskService taskService = processEngine.getTaskService(); taskService.complete(taskId, variables); } } ``` 6. 编写 Controller 类 编写一个 Controller 类,用于接收请求并调用 Service 类中的方法。例如: ```java @RestController @RequestMapping("/process") public class ProcessController { @Autowired private ProcessService processService; // 启动流程实例 @PostMapping("/start") public void startProcess(@RequestParam("processDefinitionKey") String processDefinitionKey, @RequestBody Map<String, Object> variables) { processService.startProcess(processDefinitionKey, variables); } // 查询任务列表 @GetMapping("/task") public List<Task> getTaskList(@RequestParam("assignee") String assignee) { return processService.getTaskList(assignee); } // 完成任务 @PostMapping("/complete") public void completeTask(@RequestParam("taskId") String taskId, @RequestBody Map<String, Object> variables) { processService.completeTask(taskId, variables); } } ``` 7. 启动应用程序 使用 Maven 命令启动应用程序: ``` mvn spring-boot:run ``` 8. 测试 使用 Postman 或类似的工具向应用程序发送请求,测试流程是否正常工作。例如,启动流程实例: ``` POST http://localhost:8080/process/start?processDefinitionKey=myProcess { "message": "Hello, world!" } ``` 查询任务列表: ``` GET http://localhost:8080/process/task?assignee=john ``` 完成任务: ``` POST http://localhost:8080/process/complete?taskId=123456 { "approved": true } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值