SpringBootはActiviti7実装コードを統合する

SpringBootはActiviti7実装コードを統合する

Activiti7 の正式リリース以降、SpringBoot2.x との統合開発を全面的にサポートしています。 Activiti7 と SpringBoot の統合開発のコーディネートをプロジェクトに導入することで、SpringBoot が Activti7 の統合をサポートできるようになります。

1. IDEAを使用してSpringBootプロジェクトを作成する

プロジェクトのpom.xmlファイルに関連する依存関係を導入します。具体的な依存関係は次のとおりです。

<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<プロジェクト 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">
  <モデルバージョン>4.0.0</モデルバージョン>
  <親>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <バージョン>2.2.1.RELEASE</バージョン>
    <relativePath/> <!-- リポジトリから親を検索 -->
  </親>
  <グループID>com.example</グループID>
  <artifactId>アクティビティ</artifactId>
  <バージョン>0.0.1-SNAPSHOT</バージョン>
  <name>アクティビティ</name>
  <description>Spring Boot のデモ プロジェクト</description>

  <プロパティ>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </プロパティ>

  <依存関係>
    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </依存関係>

    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </依存関係>

    <依存関係>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>テスト</scope>
    </依存関係>

    <依存関係>
      <groupId>org.activiti</groupId>
      <artifactId>アクティビティ-スプリングブート-スターター</artifactId>
      <バージョン>7.0.0.Beta2</バージョン>
    </依存関係>
    <依存関係>
      <グループID>org.mybatis</グループID>
      <artifactId>マイバティス</artifactId>
      <バージョン>3.4.5</バージョン>
    </依存関係>
    <依存関係>
      <グループID>mysql</グループID>
      <artifactId>mysql-コネクタ-java</artifactId>
      <バージョン>5.1.27</バージョン>
    </依存関係>
    <依存関係>
      <groupId>org.projectlombok</groupId>
      <artifactId>ロンボク</artifactId>
      <オプション>true</オプション>
    </依存関係>
  </依存関係>

  <ビルド>
    <プラグイン>
      <プラグイン>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </プラグイン>
    </プラグイン>
  </ビルド>

</プロジェクト>

2.application.ymlファイルの設定

Activiti7によって生成されたテーブルをMySQLデータベースに配置するには、設定ファイルapplication.ymlに関連する設定を追加する必要があります。

サーバ:
 ポート: 8085
春:
 応用:
  名前: spring-activiti
 データソース:
  URL: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&nullCatalogMeansCurrent=true
  ユーザー名: root
  パスワード: 123456
  ドライバークラス名: com.mysql.jdbc.Driver
 活動:
  #1.flase: デフォルト値。 activiti が起動すると、データベース テーブルに保存されているバージョンが比較されます。テーブルが存在しないか、バージョンが一致しない場合は、例外 #2 がスローされます。true: activiti はデータベース内のすべてのテーブルを更新します。テーブルが存在しない場合は自動的に作成されます #3.create_drop: アクティビティの開始時にテーブルを作成し、シャットダウン時にテーブルを削除します (テーブルを削除するには、エンジンを手動でシャットダウンする必要があります)
  #4.drop-create: アクティビティの開始時に元の古いテーブルを削除し、新しいテーブルを作成します (エンジンを手動でシャットダウンする必要はありません)
  データベーススキーマ更新: true
  #履歴テーブルが存在するかどうかを確認します db-history-used: true
  #記録履歴レベル設定可能な履歴レベルは、なし、アクティビティ、監査、完全です
  履歴レベル: フル
  #プロセス ファイルをチェックします。デフォルトでは、リソースの下のプロセス フォルダー内のプロセス ファイルをチェックします。check-process-definitions: false

3. SpringSecurityセキュリティフレームワーク統合構成を追加する

Activiti7をSpringBootに統合すると、SpringSecurityセキュリティフレームワークがデフォルトで統合されるため、SpringSecurityによって統合された関連するユーザー権限構成情報を準備する必要があります。

1) SecurityUtilクラスを追加する

SpringSecurity セキュリティ フレームワークをすばやく構成するために追加されたコンポーネント。

@成分
パブリッククラス SecurityUtil {

  プライベート Logger ロガー = LoggerFactory.getLogger(SecurityUtil.class);

  オートワイヤード
  @修飾子("myUserDetailsS​​ervice")
  プライベート UserDetailsS​​ervice userDetailsS​​ervice;

  パブリック void logInAs(文字列ユーザー名) {

    ユーザーの詳細 user = userDetailsS​​ervice.loadUserByUsername(ユーザー名);
    (ユーザー == null)の場合{
      throw new IllegalStateException("ユーザー " + username + " は存在しません。有効なユーザーを指定してください");
    }
    logger.info("> ログイン: " + ユーザー名);
    SecurityContextHolder.setContext(新しいSecurityContextImpl(新しい認証() {
      @オーバーライド
      パブリックコレクション<? extends GrantedAuthority> getAuthorities() {
        user.getAuthorities() を返します。
      }

      @オーバーライド
      パブリックオブジェクト getCredentials() {
        user.getPassword() を返します。
      }

      @オーバーライド
      パブリックオブジェクトgetDetails() {
        ユーザーを返します。
      }

      @オーバーライド
      パブリックオブジェクト getPrincipal() {
        ユーザーを返します。
      }

      @オーバーライド
      パブリックブール値isAuthenticated() {
        true を返します。
      }

      @オーバーライド
      パブリック void setAuthenticated(boolean isAuthenticated) は IllegalArgumentException をスローします {

      }

      @オーバーライド
      パブリック文字列getName() {
        user.getUsername() を返します。
      }
    }));
    org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(ユーザー名);
  }
}

このクラスは、Activiti7 によって公式に提供されている例にあります。

2) DemoApplicationConfigクラスを追加する

その役割は、SpringSecurityフレームワークのユーザー権限の構成を実装し、システムでユーザー権限情報を使用できるようにすることです。

@構成
パブリッククラスDemoApplicationConfiguration {

  プライベート Logger ロガー = LoggerFactory.getLogger(DemoApplicationConfiguration.class);

  @ビーン
  パブリックUserDetailsS​​ervicemyUserDetailsS​​ervice() {

    InMemoryUserDetailsManager inMemoryUserDetailsManager = 新しい InMemoryUserDetailsManager();

    文字列[][] usersGroupsAndRoles = {
        {"salaboy", "パスワード", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"ryandawsonuk", "パスワード", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"erdemedeiros", "パスワード", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"その他", "パスワード", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"},
        {"システム", "パスワード", "ROLE_ACTIVITI_USER"},
        {"管理者", "パスワード", "ROLE_ACTIVITI_ADMIN"},
    };

    (String[] ユーザー: ユーザーグループとロール) {
      リスト<文字列> authorizedStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
      logger.info("> 新しいユーザー「 + user[0] + "」を次のAuthorities[" + authorizedsStrings + "]"で登録しています);
      inMemoryUserDetailsManager.createUser(新しいUser(user[0], passwordEncoder().encode(user[1]),
          権限Strings.stream().map(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList())));
    }


    inMemoryUserDetailsManager を返します。
  }


  @ビーン
  パブリックパスワードエンコーダパスワードエンコーダ(){
    新しい BCryptPasswordEncoder() を返します。
  }

}

4) テストクラスを作成する

@SpringBootテスト
翻訳者
クラス ActivitiApplicationTests {

  オートワイヤード
  プライベート ProcessEngine processEngine;

  /**
   * プロセス定義の展開 */
  @テスト
  パブリック void createDeploy() { 
    リポジトリサービス リポジトリサービス = processEngine.getRepositoryService();

    デプロイメント デプロイメント = repositoryService.createDeployment()
        .addClasspathResource("diagram/holiday.bpmn")//bpmn リソースを追加します。addClasspathResource("diagram/holiday.png")
        .name("休暇申請書プロセス")
        。展開する(); 
        
    log.info("プロセスデプロイメントID:" + deployment.getName());
    log.info("プロセスデプロイメント名:" + deployment.getId());
  }
}

実行結果:

発生した問題:

1) 履歴テーブルはデフォルトでは生成されないため、application.yml で設定する必要があります。

春:
 活動:
  #履歴テーブルが存在するかどうかを確認します db-history-used: true
  #記録履歴レベル設定可能な履歴レベルは、なし、アクティビティ、監査、完全です
  履歴レベル: フル

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Springbootアクティビティを使用して検証自動展開モードを閉じる
  • Springboot 統合アクティビティ プロセス図
  • SpringBoot 統合アクティビティのサンプルコード
  • Springとアクティビティの統合プロセスの分析
  • Springbootはアクティビティの自動展開と展開ファイルの命名プロセスを統合します

<<:  jQueryで大画面スクロール再生効果を実現

>>:  SQL における参照整合性の詳細な説明 (1 対 1、1 対多、多対多)

推薦する

Vue 基本チュートリアル: 条件付きレンダリングとリストレンダリング

目次序文1.1 機能1.2 要素の可視性を制御する方法1.3 初期レンダリングの比較1.4 スイッチ...

Dockerレジストリイメージ同期の実装アイデア

はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...

Web インタビュー Vue カスタム コンポーネントと呼び出しメソッド

輸入:プロジェクトの要件により、同じコードの一部をコンポーネントにカプセル化し、必要な場所にインポー...

HTML でのテキストエリアの使用と一般的な問題およびケース分析

textarea タグはよく使われる HTML タグです。主に長いテキストを入力するときに改行するた...

MySQL はパスワード強度の検証をオフにします

パスワード強度検証について: [root@mysql mysql]# mysql -uroot -p...

時点に基づくMySQLクイックリカバリソリューション

なぜこのような記事を書いたかというと、数日前の夜、仕事が終わろうとしていたときに、業務側で突然、テー...

ウェブマスターが注目すべき、ウェブサイトのユーザビリティを向上させる 9 つのコード最適化のヒント

1. ロゴに代替テキストを追加するこれには 2 つの利点があります。スクリーン リーダーがロゴ画像の...

mysql データはどこに保存されますか?

MySQLデータベースの保存場所: 1. MySQLがMyISAMストレージエンジンを使用する場合...

読み取り専用と無効の違い

要約すると: Readonly は入力 (テキスト/パスワード) とテキスト領域に対してのみ有効です...

MySQL テーブルを作成するためによく使用される SQL ステートメントの概要

最近、私はプロジェクトに取り組んでおり、背景を記述するために SQL ステートメントを使用する必要が...

Reactは無限ループスクロール情報を実装する

この記事では、無限ループスクロールを実現するためのReactの具体的なコードを参考までに紹介します。...

JS がビデオ弾幕効果を実現

これを実現するには、ES6 モジュール開発とオブザーバー モードを使用します。オブザーバー パターン...

Mysql InnoDBとMyISAMの違いの分析

MySQL は、myisam、innodb、memory、archive、example など、多く...

Faint: 「Web2.0 を使用して標準に準拠したページを作成する」

今日、ある人がウェブサイト開発プロジェクトについて話をしてくれました。具体的な要件について話すと、「...

Dockerイメージを構築する2つの方法

目次既存のイメージからイメージを更新します。イメージを最初から構築する: Docker イメージ リ...