0.背景
工作中,一项任务需要用到工作流,首先接触的是ruoyi-vue-activiti。原作者对工作流进行了简单封装,然后制作出了ruoyi-vue-acitiviti,中间有些细节没太搞明白,今天这篇文章记录下用SpringBoot集成activity过程。
工具:IDEA、mysql、spring boot(2.7.7)、activiti-spring-boot-starter(7.1.0.M6)、mybatis(2.1.4)
1.创建项目
我们创建一个spring boot项目,初始的pom文件如下:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.7</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.example</groupId> <artifactId>activiti</artifactId> <version>1.0-SNAPSHOT</version> <properties> <java.version>1.8</java.version> </properties> <!--依赖--> <dependencies> <!--spring-boot-web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <!--activiti依赖--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> </dependency> <dependency> <groupId>org.activiti.dependencies</groupId> <artifactId>activiti-dependencies</artifactId> <version>7.1.0.M6</version> <type>pom</type> </dependency> </dependencies> </project>
然后在resuorces文件夹下创建配置文件application.yml。
初始的配置文件参考如下:
server: port: 8090 #端口 # spring配置 spring: #mysql配置 datasource: url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver #工作流activiti配置 activiti: #名字 database-schema: ACTIVITI #自动更新数据库结构 #1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常 #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建 #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表) #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎) database-schema-update: true #activiti7默认不生成历史信息表,开启历史表 db-history-used: true #记录历史等级 可配置的历史级别有none, activity, audit, full #none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。 #activity:级别高于none,保存流程实例与流程行为,其他数据不保存。 #audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。 #full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。 history-level: full #自动检查、部署流程定义文件 check-process-definitions: false # asyncExecutorActivate是指activiti在流程引擎启动就激活AsyncExecutor,异步:true-开启(默认)、false-关闭 async-executor-activate: true
同时,需要对应创建一个数据库,名字就是上面配置的名字。
然后创建启动类:
package site.longkui.activiti; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Activiti { public static void main(String[] args) { SpringApplication.run(Activiti.class, args); } }
2.增加服务类
上面代码我们如果启动的话会报错,我们需要创建服务类。这里我们创建了四个文件夹,controller、entity、mapper、service,用来后期进行扩展。
我们在sevice层创建如下代码:
package site.longkui.activiti.service; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { public User findOneUserByName(String username){ List<GrantedAuthority> authorities = AuthorityUtils.commaSeparatedStringToAuthorityList("admin"); return new User(username,"",authorities); } }
然后去实现这个方法:
package site.longkui.activiti.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Component; import site.longkui.activiti.service.UserService; @Component public class UserDetailsServiceImpl implements UserDetailsService { @Autowired UserService userService; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { return userService.findOneUserByName(username); } }
然后启动项目,就可以看到我们创建的数据表中生成了新的25张新表。