SpringBoot整合Activiti7的實(shí)現(xiàn)代碼
Activiti7發(fā)布正式版之后,它與SpringBoot2.x已經(jīng)完全支持整合開發(fā)。我們可以將Activiti7與SpringBoot整合開發(fā)的坐標(biāo)引入到工程中,從而達(dá)到SpringBoot支持Activti7整合。
1.使用IDEA創(chuàng)建SpringBoot項(xiàng)目
在工程的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: 默認(rèn)值。activiti在啟動(dòng)時(shí),會對比數(shù)據(jù)庫表中保存的版本,如果沒有表或者版本不匹配,將拋出異常 #2.true: activiti會對數(shù)據(jù)庫中所有表進(jìn)行更新操作。如果表不存在,則自動(dòng)創(chuàng)建 #3.create_drop: 在activiti啟動(dòng)時(shí)創(chuàng)建表,在關(guān)閉時(shí)刪除表(必須手動(dòng)關(guān)閉引擎,才能刪除表) #4.drop-create: 在activiti啟動(dòng)時(shí)刪除原來的舊表,然后在創(chuàng)建新表(不需要手動(dòng)關(guān)閉引擎) database-schema-update: true #檢測歷史表是否存在 db-history-used: true #記錄歷史等級 可配置的歷史級別有none, activity, audit, full history-level: full #校驗(yàn)流程文件,默認(rèn)校驗(yàn)resources下的processes文件夾里的流程文件 check-process-definitions: false
3.添加SpringSecurity安全框架整合配置
Activiti7與SpringBoot整合后,默認(rèn)情況下,集成了SpringSecurity安全框架,這樣我們就要去準(zhǔn)備SpringSecurity整合進(jìn)來的相關(guān)用戶權(quán)限配置信息
1)添加SecurityUtil類
為了能夠快速實(shí)現(xiàn)SpringSecurity安全框架的配置,所添加的一個(gè)組件。
@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); } }
這個(gè)類可以從Activiti7官方提供的Example中找到。
2)添加DemoApplicationConfig類
它的作用是為了實(shí)現(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()); } }
運(yùn)行結(jié)果:
遇到的問題:
1)歷史表默認(rèn)不會生成,需在application.yml中配置
spring: activiti: #檢測歷史表是否存在 db-history-used: true #記錄歷史等級 可配置的歷史級別有none, activity, audit, full history-level: full
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Linux7.7設(shè)置交換分區(qū)SWAP的方法
欄 目:Linux/apache
下一篇:centos8 安裝 nginx的詳細(xì)教程(圖文)
本文標(biāo)題:SpringBoot整合Activiti7的實(shí)現(xiàn)代碼
本文地址:http://mengdiqiu.com.cn/a1/Linux_apache/10649.html
您可能感興趣的文章


閱讀排行
本欄相關(guān)
- 04-02linux關(guān)閉串口命令 關(guān)閉linux端口命令
- 04-02linux文件命令重命名 linux重命名文件名
- 04-02linux中jobs命令 shell jobs命令
- 04-02linux命令注入過濾 linux 代碼注入
- 04-02linux依次執(zhí)行命令 linux命令的執(zhí)行過程
- 04-02linux命令注銷vnc linux命令行注銷用戶
- 04-02linux命令免輸入 linux配置免密登錄
- 04-02軟交換linux命令 軟交換網(wǎng)絡(luò)主要協(xié)議
- 04-02linux命令歷史記錄 linux查看歷史記錄的
- 04-02linux命令頁面 linux命令頁面中文
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-10delphi制作wav文件的方法
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
- 01-11ajax實(shí)現(xiàn)頁面的局部加載