SpringBoot整合Activiti7的實現(xiàn)代碼
Activiti7發(fā)布正式版之后,它與SpringBoot2.x已經(jīng)完全支持整合開發(fā)。我們可以將Activiti7與SpringBoot整合開發(fā)的坐標引入到工程中,從而達到SpringBoot支持Activti7整合。
1.使用IDEA創(chuàng)建SpringBoot項目
在工程的pom.xml文件中引入相關的依賴,具體依賴如下所示
<?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中添加相關的配置
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)建表,在關閉時刪除表(必須手動關閉引擎,才能刪除表) #4.drop-create: 在activiti啟動時刪除原來的舊表,然后在創(chuàng)建新表(不需要手動關閉引擎) 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整合進來的相關用戶權限配置信息
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框架的用戶權限的配置,這樣我們就可以在系統(tǒng)中使用用戶權限信息
@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());
}
}
運行結果:


遇到的問題:
1)歷史表默認不會生成,需在application.yml中配置
spring: activiti: #檢測歷史表是否存在 db-history-used: true #記錄歷史等級 可配置的歷史級別有none, activity, audit, full history-level: full
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
CentOS7將Nginx添加系統(tǒng)服務的方法步驟
這篇文章主要介紹了CentOS7將Nginx添加系統(tǒng)服務的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-03-03
Linux中切換用戶出現(xiàn)bash-4.2$問題解決
這篇文章主要給大家介紹了關于Linux中切換用戶出現(xiàn)bash-4.2$問題解決的相關資料,我們需要進行一個復盤,只有發(fā)生問題,才能嘗試著去解決問題,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11
基于linux配置selenium環(huán)境并實現(xiàn)運行
這篇文章主要介紹了基于linux配置selenium環(huán)境并實現(xiàn)運行,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08
Linux中MongoDB如何實現(xiàn)遠程自動備份詳解
這篇文章主要給大家介紹了關于Linux中MongoDB如何實現(xiàn)遠程自動備份的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-09-09

