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

推薦する

太陽系の惑星のアニメーション効果を実現するHTML+CSS3コード

太陽系の 8 つの惑星(衛星を除く)のアニメーションを作成します。すべての惑星は太陽の周りを回ってい...

Flask アプリケーションの Docker デプロイ実装手順

1. 目的Flask アプリケーションをローカルで作成し、Docker でパッケージ化し、独自のサー...

docker-swarm をベースにした継続的インテグレーション クラスタ サービスの構築の詳細な説明

序文この記事は私自身の製作過程の簡単な記録です。練習中に質問があれば、一緒に話し合うことができます。...

Tomcat10 Catalinaのログの文字化けの問題を解決する

実行環境、Idea2020バージョン、Tomcat10、実行時にTomcat CatalinaLog...

JavaScript はスローモーションアニメーションのカプセル化と使用法を説明します

プロセス分析の実装(1)繰り返して電話をかけるには?答え: 関数をカプセル化して一度だけ呼び出すコー...

Vue のローカルコンポーネントの紹介

Vueでは、ローカルコンポーネントを自分で定義(登録)することができます。コンポーネント名を定義する...

MySql 5.6.36 64 ビット グリーン バージョンのインストール グラフィック チュートリアル

MySQL のインストールについてはインターネット上に多くの記事がありますが、今日ノート PC にイ...

jQueryは記事の折りたたみと展開の機能を実装します

この記事の例では、記事の折りたたみと展開の機能を実現するためのjQueryの具体的なコードを参考まで...

Linux システムでキャッシュをクリアする方法の概要

1) キャッシュメカニズムの紹介Linux システムでは、ファイルシステムのパフォーマンスを向上させ...

MySQLインデックスの簡単な分析

データベース インデックスは、テーブル操作の速度を向上させることを目的としたデータ構造です。高速なラ...

docker-compose ポートと expose の違いの詳細な説明

docker-compose でコンテナ ポートを公開する方法は、ports と expose の ...

JavaScript 定期検証パスワード強度実装方法

展示する デザインパスワード強度分析パスワードは数字、文字、特殊記号で構成されていますパスワード: ...

検証コード干渉を実装する js (静的)

この記事では、検証コード干渉を実装するためのjsの具体的なコードを参考までに共有します。具体的な内容...

MySQL カウントを向上させる方法のまとめ

多くのプログラマーは MySQL に精通していると思います。多くの人が count の使い方と、最適...

一定期間の日ごと、時間ごとの統計データを取得するMySQLの詳しい説明

毎日の統計情報を取得するプロジェクトを実行する際、プロジェクト ログを分析する必要があります。要件の...