SpringBoot整合Activiti7的實現(xiàn)代碼
Activiti7發(fā)布正式版之后,它與SpringBoot2.x已經(jīng)完全支持整合開發(fā)。我們可以將Activiti7與SpringBoot整合開發(fā)的坐標(biāo)引入到工程中,從而達到SpringBoot支持Activti7整合。
1.使用IDEA創(chuàng)建SpringBoot項目
在工程的pom.xml文件中引入相關(guān)的依賴,具體依賴如下所示
<?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 https://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.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>activiti</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>activiti</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.0.0.Beta2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.27</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
2.application.yml文件配置
為了能夠?qū)崿F(xiàn)Activiti7生成的表放到Mysql數(shù)據(jù)庫中,需要在配置文件application.yml中添加相關(guān)的配置
server: port: 8085 spring: application: name: spring-activiti datasource: url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&nullCatalogMeansCurrent=true username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver activiti: #1.flase: 默認值。activiti在啟動時,會對比數(shù)據(jù)庫表中保存的版本,如果沒有表或者版本不匹配,將拋出異常 #2.true: activiti會對數(shù)據(jù)庫中所有表進行更新操作。如果表不存在,則自動創(chuàng)建 #3.create_drop: 在activiti啟動時創(chuàng)建表,在關(guān)閉時刪除表(必須手動關(guān)閉引擎,才能刪除表) #4.drop-create: 在activiti啟動時刪除原來的舊表,然后在創(chuàng)建新表(不需要手動關(guān)閉引擎) database-schema-update: true #檢測歷史表是否存在 db-history-used: true #記錄歷史等級 可配置的歷史級別有none, activity, audit, full history-level: full #校驗流程文件,默認校驗resources下的processes文件夾里的流程文件 check-process-definitions: false
3.添加SpringSecurity安全框架整合配置
Activiti7與SpringBoot整合后,默認情況下,集成了SpringSecurity安全框架,這樣我們就要去準備SpringSecurity整合進來的相關(guān)用戶權(quán)限配置信息
1)添加SecurityUtil類
為了能夠快速實現(xiàn)SpringSecurity安全框架的配置,所添加的一個組件。
@Component
public class SecurityUtil {
private Logger logger = LoggerFactory.getLogger(SecurityUtil.class);
@Autowired
@Qualifier("myUserDetailsService")
private UserDetailsService userDetailsService;
public void logInAs(String username) {
UserDetails user = userDetailsService.loadUserByUsername(username);
if (user == null) {
throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");
}
logger.info("> Logged in as: " + username);
SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return user.getAuthorities();
}
@Override
public Object getCredentials() {
return user.getPassword();
}
@Override
public Object getDetails() {
return user;
}
@Override
public Object getPrincipal() {
return user;
}
@Override
public boolean isAuthenticated() {
return true;
}
@Override
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
}
@Override
public String getName() {
return user.getUsername();
}
}));
org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);
}
}
這個類可以從Activiti7官方提供的Example中找到。
2)添加DemoApplicationConfig類
它的作用是為了實現(xiàn)SpringSecurity框架的用戶權(quán)限的配置,這樣我們就可以在系統(tǒng)中使用用戶權(quán)限信息
@Configuration
public class DemoApplicationConfiguration {
private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);
@Bean
public UserDetailsService myUserDetailsService() {
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
String[][] usersGroupsAndRoles = {
{"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
{"other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"},
{"system", "password", "ROLE_ACTIVITI_USER"},
{"admin", "password", "ROLE_ACTIVITI_ADMIN"},
};
for (String[] user : usersGroupsAndRoles) {
List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
logger.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");
inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]),
authoritiesStrings.stream().map(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList())));
}
return inMemoryUserDetailsManager;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
4)創(chuàng)建測試類
@SpringBootTest
@Slf4j
class ActivitiApplicationTests {
@Autowired
private ProcessEngine processEngine;
/**
* 流程定義的部署
*/
@Test
public void createDeploy() {
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("diagram/holiday.bpmn")//添加bpmn資源
.addClasspathResource("diagram/holiday.png")
.name("請假申請單流程")
.deploy();
log.info("流程部署id:" + deployment.getName());
log.info("流程部署名稱:" + deployment.getId());
}
}
運行結(jié)果:


遇到的問題:
1)歷史表默認不會生成,需在application.yml中配置
spring: activiti: #檢測歷史表是否存在 db-history-used: true #記錄歷史等級 可配置的歷史級別有none, activity, audit, full history-level: full
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Linux如何使用 MyCat 實現(xiàn) MySQL 主從讀寫分離
這篇文章主要介紹了Linux如何 MyCat 實現(xiàn) MySQL 主從讀寫分離,感興趣并且想詳情了解的小伙伴接著看下文吧2021-08-08
Linux7.7設(shè)置交換分區(qū)SWAP的方法
這篇文章主要介紹了Linux7.7設(shè)置交換分區(qū)SWAP的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
centos7.6批量增加修改刪除虛擬網(wǎng)卡操作介紹
大家好,本篇文章主要講的是centos7.6批量增加修改刪除虛擬網(wǎng)卡操作介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2021-12-12

