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 対多、多対多)

推薦する

MySQL ディープ ページング (数千万のデータを素早くページ分割する方法)

目次序文場合最適化まとめ序文バックエンド開発では、一度に大量のデータがロードされ、メモリやディスク ...

表示または可視性によってHTML要素を非表示にする

場合によっては、特定の条件に基づいて Web ページ内の HTML 要素を表示するか非表示にするかを...

LinuxでのDockerのインストールチュートリアル

Docker パッケージは、デフォルトの CentOS-Extras リポジトリにすでに含まれていま...

Docker ベースの Redis クラスターの構築方法

Redisイメージをダウンロードする docker pull yyyyttttwww/redis を...

ubuntu20.04 LTS システムのデフォルト ソース ソース リスト ファイルの変更

誤って source.list の内容を変更し、一連のエラーが発生した場合は、デフォルトのソース フ...

Docker-compose インストール yml ファイルの設定方法

目次1. オフラインインストール2. オンラインインストール3. アンインストール4. ymlファイ...

MySql のグループ化と各グループからランダムに 1 つのデータを取得する

アイデア: 最初にランダムに並べ替えてからグループ化します。 1. テーブルを作成します。 テーブル...

JavaScript で円形のプログレスバー効果を実装する

この記事では、円形のプログレスバー効果を実現するためのJavaScriptの具体的なコードを参考まで...

Linuxでディスク使用量を確認する方法

1. dfコマンドを使用してディスク全体の使用量を表示します。 df コマンドは、ハードディスクのマ...

mysql スケジュールタスク (イベント イベント) の詳細な説明

1. イベントの簡単な紹介イベントは、MySQL が特定の時間に呼び出す手続き型データベース オブジ...

MySQL Community Server 圧縮パッケージのインストールと設定方法

今日は、MySQL をインストールしたかったので、公式 Web サイトにアクセスして、MySQL の...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...

Vue Element フロントエンドアプリケーション開発開発環境の準備

目次概要1. 必要なソフトウェア環境を開発する1) VSコードのインストール2) ノード開発環境をイ...

Vueは視覚的なドラッグページエディタを実装します

目次ドラッグアンドドロップの実装ドラッグイベントドラッグして開始リリースゾーンでの移動境界処理、角度...

JavaScript 履歴オブジェクトの説明

目次1. ルートナビゲーション2. 履歴状態管理API (1)ハッシュチェンジイベント(2)ポップス...