激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務(wù)器之家 - 編程語言 - Java教程 - Activiti7整合Springboot使用記錄

Activiti7整合Springboot使用記錄

2021-11-24 11:51冰之杍 Java教程

這篇文章主要介紹了Activiti7+Springboot使用整合記錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

0.springboot項(xiàng)目創(chuàng)建

通過https://start.spring.io/生成純凈的一個(gè)springboot工程

1.引入activiti相關(guān)依賴

?
1
2
3
4
5
<dependency>
    <groupid>org.activiti</groupid>
    <artifactid>activiti-spring-boot-starter</artifactid>
    <version>7.1.0.m6</version>
</dependency>

2.啟動(dòng)工程并創(chuàng)建activiti數(shù)據(jù)庫

##activiti7中使用spring security,因此啟動(dòng)工程前,需要加入2個(gè)文件支持,2個(gè)文件的代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package cn.gzsendi.activitidemotest.config;
 
import java.util.arrays;
import java.util.list;
import java.util.stream.collectors;
 
import org.slf4j.logger;
import org.slf4j.loggerfactory;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
import org.springframework.security.core.authority.simplegrantedauthority;
import org.springframework.security.core.userdetails.user;
import org.springframework.security.core.userdetails.userdetailsservice;
import org.springframework.security.crypto.bcrypt.bcryptpasswordencoder;
import org.springframework.security.crypto.password.passwordencoder;
import org.springframework.security.provisioning.inmemoryuserdetailsmanager;
 
@configuration
public class activiticonfiguration {
    
    private logger logger = loggerfactory.getlogger(activiticonfiguration.class);
    
    @bean(name = "userdetailsservice")
    public userdetailsservice myuserdetailsservice() {
 
        inmemoryuserdetailsmanager inmemoryuserdetailsmanager = new inmemoryuserdetailsmanager();
 
        //用戶
        string[][] usersgroupsandroles = {
                {"hefy", "123456", "role_activiti_user"},
                {"liujh", "123456", "role_activiti_admin"},
                {"liuky", "123456", "role_activiti_user"},
                {"admin", "123456", "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();
    }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package cn.gzsendi.activitidemotest.utils;
 
import java.util.collection;
 
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.beans.factory.annotation.qualifier;
import org.springframework.security.core.authentication;
import org.springframework.security.core.grantedauthority;
import org.springframework.security.core.context.securitycontextholder;
import org.springframework.security.core.context.securitycontextimpl;
import org.springframework.security.core.userdetails.userdetails;
import org.springframework.security.core.userdetails.userdetailsservice;
import org.springframework.stereotype.component;
 
import javax.annotation.resource;
 
@component
public class securityutil {
    
    @autowired
    @qualifier("userdetailsservice")
    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");
        }
 
        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的配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
server.port=8080
server.servlet.context-path=/activitidemotest
 
spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver
spring.datasource.url=jdbc:mysql://localhost:3306/activitidemo?usessl=false&useunicode=true&characterencoding=utf8&servertimezone=gmt%2b8&allowmultiqueries=true
spring.datasource.username=root
spring.datasource.password=123456
 
spring.activiti.database-schema-update=true
spring.activiti.db-history-used=true
spring.activiti.history-level=full
spring.activiti.check-process-definitions=false
spring.activiti.deployment-mode=never-fail
spring.activiti.process-definition-location-prefix=classpath:/process/

##啟動(dòng)springboot工程,讓系統(tǒng)啟動(dòng)時(shí)幫我們建好25張表 2.安裝activiti插件(設(shè)計(jì)器) ##idea

file->settings->plugins,然后找actibpm進(jìn)行安裝。
Activiti7整合Springboot使用記錄

##流程圖中亂碼問題先提前設(shè)置防止:

修改idea64.exe.vmoptions文件,在文件中加上如下,然后重啟idea

-dfile.encoding=utf-8

##進(jìn)行流程設(shè)計(jì)

file->new->bpmnfile
Activiti7整合Springboot使用記錄
Activiti7整合Springboot使用記錄

設(shè)計(jì)好后,修改process1.bpmn成process1.xml,然后右鍵export file導(dǎo)出成process1.jpg,再將process1.bpmn修改成process1.bpmn20.xml,最后將2個(gè)文件放在process文件夾
Activiti7整合Springboot使用記錄

3.流程部署

使用activiti提供的api把流程定義內(nèi)容存儲(chǔ)起來,activiti執(zhí)行把流程定義內(nèi)容存儲(chǔ)在數(shù)據(jù)庫中。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package cn.gzsendi.activitidemotest;
 
/**
 * created by jxlhl on 2021/8/18.
 */
 
import org.activiti.engine.repositoryservice;
import org.activiti.engine.repository.deployment;
import org.activiti.engine.repository.deploymentbuilder;
import org.junit.test;
import org.junit.runner.runwith;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.boot.test.context.springboottest;
import org.springframework.test.context.junit4.springrunner;
 
@runwith(springrunner.class)
@springboottest
public class springbootjunittest {
 
    //得到repositoryservice實(shí)例
    @autowired
    private repositoryservice repositoryservice;
 
    //0.流程部署,單個(gè)文件部署方式
    @test
    public void testdeployment(){
 
        //使用repositoryservice進(jìn)行部署
        deploymentbuilder builder = repositoryservice.createdeployment();
        builder.addclasspathresource("process/process1.bpmn20.xml");
        builder.addclasspathresource("process/process1.jpg");
        builder.name("first_activiti_process");
        deployment deployment = builder.deploy();
 
        //輸出部署信息
        system.out.println("流程部署id:" + deployment.getid());
        system.out.println("流程部署名稱:" + deployment.getname());
 
        //流程部署id:125098e1-ffd9-11eb-8847-02004c4f4f50
        //流程部署名稱:first_activiti_process
 
    }
 
}

執(zhí)行此操作后activiti會(huì)將上邊代碼中指定的bpmn20文件和圖片文件保存在activiti數(shù)據(jù)庫。

流程定義部署后操作activiti的3張表

Activiti7整合Springboot使用記錄
Activiti7整合Springboot使用記錄
Activiti7整合Springboot使用記錄

4.流程實(shí)例啟動(dòng)

啟動(dòng)一個(gè)流程實(shí)例表示開始一次業(yè)務(wù)流程的運(yùn)行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//1.流程實(shí)例啟動(dòng)
  @test
  public void teststartprocess(){
      //根據(jù)流程定義id啟動(dòng)流程
      processinstance processinstance = runtimeservice.startprocessinstancebykey("myprocess_1");
 
      //輸出實(shí)例信息
      system.out.println("流程定義id:" + processinstance.getprocessdefinitionid());
      system.out.println("流程實(shí)例id:" + processinstance.getid());
      system.out.println("當(dāng)前活動(dòng)id:" + processinstance.getactivityid());
 
      //流程定義id:myprocess_1:1:12702ed4-ffd9-11eb-8847-02004c4f4f50
      //流程實(shí)例id:a9b162aa-ffda-11eb-bad1-02004c4f4f50
      //當(dāng)前活動(dòng)id:null
 
  }

流程實(shí)例啟動(dòng),將操作以下幾個(gè)數(shù)據(jù)庫表

?
1
2
3
4
5
6
7
act_hi_actinst 流程實(shí)例執(zhí)行歷史
act_hi_identitylink 流程的參與用戶歷史信息
act_hi_procinst 流程實(shí)例歷史信息
act_hi_taskinst 流程任務(wù)歷史信息
act_ru_execution 流程執(zhí)行信息
act_ru_identitylink 流程的參與用戶信息
act_ru_task 任務(wù)信息

5.任務(wù)查詢

流程啟動(dòng)后,任務(wù)的負(fù)責(zé)人就可以查詢自己當(dāng)前需要處理的任務(wù),查詢出來的任務(wù)都是該用戶的待辦任務(wù)。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//2.任務(wù)查詢
   //流程啟動(dòng)后,任務(wù)的負(fù)責(zé)人就可以查詢自己當(dāng)前需要處理的任務(wù),查詢出來的任務(wù)都是該用戶的待辦任務(wù)。
   @test
   public void testfindpersonaltasklist() {
       //任務(wù)負(fù)責(zé)人
       string assignee = "liuky";
 
       //根據(jù)流程key 和 任務(wù)負(fù)責(zé)人 查詢?nèi)蝿?wù)
       list<task> list = taskservice.createtaskquery()
               .processdefinitionkey("myprocess_1")
               .taskassignee(assignee)
               .list();
 
       for (task task : list) {
 
           system.out.println("流程實(shí)例id:" + task.getprocessinstanceid());
           system.out.println("任務(wù)id:" + task.getid());
           system.out.println("任務(wù)負(fù)責(zé)人:" + task.getassignee());
           system.out.println("任務(wù)名稱:" + task.getname());
 
       }
 
       //流程實(shí)例id:a9b162aa-ffda-11eb-bad1-02004c4f4f50
       //任務(wù)id:a9b5815e-ffda-11eb-bad1-02004c4f4f50
       //任務(wù)負(fù)責(zé)人:liuky
       //任務(wù)名稱:提交申請(qǐng)
 
   }

6. 完成任務(wù)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@test
   public void complettask(){
 
       //根據(jù)流程key和任務(wù)的負(fù)責(zé)人查詢?nèi)蝿?wù)并選擇其中的一個(gè)任務(wù)處理,這里用的
       //是singleresult返回一條,真實(shí)環(huán)境中是通過步驟5中查詢出所有的任務(wù),然后在頁面上選擇一個(gè)任務(wù)進(jìn)行處理.
       task task = taskservice.createtaskquery()
               .processdefinitionkey("myprocess_1") //流程key
               .taskassignee("liuky"//要查詢的負(fù)責(zé)人
               .singleresult();
               
       //完成任務(wù),參數(shù):任務(wù)id
       taskservice.complete(task.getid());
 
   }

7.流程結(jié)束,或流程流轉(zhuǎn)過程中的歷史信息查詢

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//流程結(jié)束,或流程流轉(zhuǎn)過程中的歷史信息查詢
 @test
 public void findhistoryinfo(){
 
     //獲取 actinst表的查詢對(duì)象
     historicactivityinstancequery instancequery = historyservice.createhistoricactivityinstancequery();
     //查詢 actinst表,條件:根據(jù) instanceid 查詢
     instancequery.processinstanceid("fb5b7674-ffde-11eb-91f8-02004c4f4f50");
     //增加排序操作,orderbyhistoricactivityinstancestarttime 根據(jù)開始時(shí)間排序 asc 升序
     instancequery.orderbyhistoricactivityinstancestarttime().asc();
     //查詢所有內(nèi)容
     list<historicactivityinstance> activityinstancelist = instancequery.list();
     //輸出結(jié)果
     for (historicactivityinstance hi : activityinstancelist) {
 
         system.out.println("");
         system.out.println("===================-===============");
         system.out.println(hi.getstarttime());
         system.out.println(hi.getassignee());
         system.out.println(hi.getactivityid());
         system.out.println(hi.getactivityname());
         system.out.println(hi.getprocessdefinitionid());
         system.out.println(hi.getprocessinstanceid());
         system.out.println("===================-===============");
         system.out.println("");
 
     }
 }

8.其他api測試

8.1 流程定義信息查詢

查詢流程相關(guān)信息,包含流程定義,流程部署,流程定義版本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@test
    public void queryprocessdefinition(){
 
        //得到processdefinitionquery對(duì)象
        processdefinitionquery processdefinitionquery = repositoryservice.createprocessdefinitionquery();
 
        //查詢出當(dāng)前所有的流程定義
        list<processdefinition> definitionlist = processdefinitionquery.processdefinitionkey("myprocess_1")
                .orderbyprocessdefinitionversion()
                .desc()
                .list();
 
        //打印結(jié)果
        for (processdefinition processdefinition : definitionlist) {
            system.out.println("流程定義 id="+processdefinition.getid());
            system.out.println("流程定義 name="+processdefinition.getname());
            system.out.println("流程定義 key="+processdefinition.getkey());
            system.out.println("流程定義 version="+processdefinition.getversion());
            system.out.println("流程部署id ="+processdefinition.getdeploymentid());
        }
 
    }

8.2 刪除流程

?
1
2
3
4
5
6
7
8
9
10
11
12
13
//刪除流程
  @test
  public void deletedeployment(){
 
      string deploymentid = "125098e1-ffd9-11eb-8847-02004c4f4f50";
 
      //刪除流程定義,如果該流程定義已有流程實(shí)例啟動(dòng)則刪除時(shí)出錯(cuò)
      repositoryservice.deletedeployment(deploymentid);
 
      //設(shè)置true 級(jí)聯(lián)刪除流程定義,即使該流程有流程實(shí)例啟動(dòng)也可以刪除,設(shè)置為false非級(jí)別刪除方式,如果流程
      //repositoryservice.deletedeployment(deploymentid, true);
 
  }

9.demo源碼下載

github: https://github.com/jxlhljh/activitidemotest.git
gitee: https://gitee.com/jxlhljh/activitidemotest.git

到此這篇關(guān)于activiti7整合springboot使用記錄的文章就介紹到這了,更多相關(guān)springboot整合activiti7內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/jxlhljh/article/details/119775872

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒有升過級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
1707
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲第一成人在线视频 | 欧美一级黄色录相 | 国产精品久久久久影院老司 | 国产精品成人一区二区三区电影毛片 | 亚洲精品一区二区三区免 | 成人免费国产视频 | 欧美黄色大片免费观看 | 成人一区二区三区在线 | 羞羞的视频免费在线观看 | 亚洲精品欧美在线 | 久久久精品精品 | 欧美精品1区| 色欲香天天天综合网站 | 亚洲第一视频 | 一级电影中文字幕 | 久久久免费观看完整版 | 国产视频在线一区 | 成人勉费视频 | 国产精品视频一区二区三区四区国 | 亚洲福利视 | 91久久国产露脸精品国产护士 | 午夜久久久精品一区二区三区 | 欧美城网站地址 | 午夜影院操 | 逼片| 久久久资源网 | 高清中文字幕在线 | videos 欧美| 一级毛片在线免费观看视频 | 一级外国毛片 | 亚洲少妇诱惑 | 国产成视频在线观看 | 欧美成人免费一区二区三区 | 欧美视频国产精品 | 九九精品视频免费 | 久久精品色 | 成人福利视频在线 | 日本网站在线播放 | 一级免费在线视频 | 免费国产在线视频 | 国产精品视频一区二区三区四区国 |