操作简述
- SpringBoot官方未提供直接的starter与Activiti集成,但是集成的过程并不困难。
- 导依赖
- 配置属性
- 配置Bean
- 启动测试
第一步:导入依赖
- 父项目导入依赖:Activiti提供独立于spring的POM,以简化使用activiti的依赖。在项目根下的pom.xml文件中导入:
<properties>
<activiti.version>7.10.0</activiti.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-dependencies</artifactId>
<version>${activiti.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
- 父项目添加Activiti仓库地址:Activiti有些jar包,未上传到中央仓库,因此需要添加Activiti的仓库
<repositories>
<repository>
<id>activiti-releases</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
</repository>
</repositories>
- 子项目导入Activiti依赖:在要使用的Activiti的模块中直接导入下面starter即可导入Activiti的依赖
- 另外Activiti需要使用到数据库,它支持Mysq、Oracle、Postgres等多种数据库,这里使用mysql进行演示
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
第二步:配置属性
- 在application.yml或者bootstrap.yml文件中配置引入框架的常用属性
spring:
activiti:
database-schema-update: true # 自动创建数据库
db-history-used: true # 开启流程历史记录
history-level: full # 历史流程数据全部记录到历史表中,支持none、activity、audit、full,4种粒度的数据
- 配置数据源:需要先创建数据库,如
dev-demo
,配置url
spring:
datasource:
password: xxxxxxx
username: root
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.2:3306/dev-demo?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true
- url中的nullCatalogMeansCurrent参数需要设置成true,表示Activiti优先在url中指定的数据库中检查是否有创建过表。否则,则会遍历整个数据源中的每个数据库,检查是否有创建过activiti的表
第三步:配置Bean
- 在Activiti7中,默认集成SpringSecurity,内部还使用到SpringSecurity系列的上下文代码,不能直接排除掉,因此在此还需要给定一些SpringSecurity的初始配置Bean。
- 这里为了避开对SpringSecurity的使用,因此直接把SpringSecurity相关配置置空即可
- UserGroupManager:用于流程中获取用户的组、角色等信息
- SecurityManager:用于获取当前操作授权的用户、组或角色等信息
- 注意,这里提供的代码中,会提示SecurityManager弃用,而产生报错,不过可以测试成功,有能力的小伙伴可以尝试解决这个问题,SpringSecurity不是本文的重点
@Bean
public UserGroupManager userGroupManager() {
return new UserGroupManager() {
@Override
public List<String> getUserGroups(String s) {
return null;
}
@Override
public List<String> getUserRoles(String s) {
return null;
}
@Override
public List<String> getGroups() {
return null;
}
@Override
public List<String> getUsers() {
return null;
}
};
}
@Bean
public SecurityManager securityManager() {
return new SecurityManager() {
public String getAuthenticatedUserId() {
return "miukoo-user-1";
}
public List<String> getAuthenticatedUserGroups() throws SecurityException {
return null;
}
public List<String> getAuthenticatedUserRoles() throws SecurityException {
return null;
}
};
}
@Configuration
public class SecurityConfig {
@Bean
public UserGroupManager userGroupManager() {
return new UserGroupManager() {
@Override
public List<String> getUserGroups(String s) {
return null;
}
@Override
public List<String> getUserRoles(String s) {
return null;
}
@Override
public List<String> getGroups() {
return null;
}
@Override
public List<String> getUsers() {
return null;
}
};
}
@Bean
public AuthenticationProvider authenticationProvider() {
return new AuthenticationProvider() {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
return new UsernamePasswordAuthenticationToken("miukoo-user-1", null, null);
}
@Override
public boolean supports(Class<?> authentication) {
return authentication.equals(UsernamePasswordAuthenticationToken.class);
}
};
}
@Bean
public SecurityContext securityContext() {
return SecurityContextHolder.getContext();
}
}
启动测试
- 只需启动服务,如果控制台没有报错,数据库中成功创建表,集成成功!