SpringBoot integriert Activiti7-Implementierungscode

SpringBoot integriert Activiti7-Implementierungscode

Nach der offiziellen Veröffentlichung von Activiti7 wird die integrierte Entwicklung mit SpringBoot2.x vollständig unterstützt. Wir können die Koordinaten der integrierten Entwicklung von Activiti7 und SpringBoot in das Projekt einführen, sodass SpringBoot die Activti7-Integration unterstützen kann.

1. Erstellen Sie ein SpringBoot-Projekt mit IDEA

Führen Sie relevante Abhängigkeiten in die pom.xml-Datei des Projekts ein. Die spezifischen Abhängigkeiten sind wie folgt

<?xml version="1.0" encoding="UTF-8"?>
<Projekt 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>
  <übergeordnetes Element>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.1.RELEASE</version>
    <relativePath/> <!-- übergeordnetes Element im Repository suchen -->
  </übergeordnet>
  <groupId>com.beispiel</groupId>
  <artifactId>Aktivitäten</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Aktivitäten</name>
  <description>Demoprojekt für Spring Boot</description>

  <Eigenschaften>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
  </Eigenschaften>

  <Abhängigkeiten>
    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-jdbc</artifactId>
    </Abhängigkeit>

    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </Abhängigkeit>

    <Abhängigkeit>
      <groupId>org.springframework.boot</groupId>
      <artifactId>Spring-Boot-Starter-Test</artifactId>
      <scope>Test</scope>
    </Abhängigkeit>

    <Abhängigkeit>
      <groupId>org.activiti</groupId>
      <artifactId>Aktivität-Spring-Boot-Starter</artifactId>
      <version>7.0.0.Beta2</version>
    </Abhängigkeit>
    <Abhängigkeit>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </Abhängigkeit>
    <Abhängigkeit>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.27</version>
    </Abhängigkeit>
    <Abhängigkeit>
      <groupId>org.projektlombok</groupId>
      <artifactId>Lombok</artifactId>
      <optional>wahr</optional>
    </Abhängigkeit>
  </Abhängigkeiten>

  <Bauen>
    <Plugins>
      <Plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>Spring-Boot-Maven-Plugin</artifactId>
      </plugin>
    </plugins>
  </bauen>

</Projekt>

2.application.yml-Dateikonfiguration

Um die von Activiti7 generierten Tabellen in die MySQL-Datenbank einzufügen, müssen Sie relevante Konfigurationen in der Konfigurationsdatei application.yml hinzufügen.

Server:
 Port: 8085
Frühling:
 Anwendung:
  Name: Frühlingsaktivitäten
 Datenquelle:
  URL: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT&nullCatalogMeansCurrent=true
  Benutzername: root
  Passwort: 123456
  Treiberklassenname: com.mysql.jdbc.Driver
 Aktivitäten:
  #1.flase: Standardwert. Wenn Activiti gestartet wird, vergleicht es die in der Datenbanktabelle gespeicherten Versionen. Wenn keine Tabelle vorhanden ist oder die Versionen nicht übereinstimmen, wird eine Ausnahme Nr. 2 ausgelöst. true: Activiti aktualisiert alle Tabellen in der Datenbank. Wenn die Tabelle nicht existiert, wird sie automatisch erstellt. #3.create_drop: Erstellt die Tabelle, wenn Activiti startet, und löscht die Tabelle, wenn sie heruntergefahren wird (die Engine muss manuell heruntergefahren werden, um die Tabelle zu löschen).
  #4.drop-create: Löschen Sie die ursprüngliche alte Tabelle, wenn Activiti startet, und erstellen Sie dann eine neue Tabelle (die Engine muss nicht manuell heruntergefahren werden).
  Datenbankschema-Update: true
  #Überprüfen Sie, ob die Verlaufstabelle vorhanden ist db-history-used: true
  #Aufzeichnungsverlaufsebene Die konfigurierbaren Verlaufsebenen sind Keine, Aktivität, Audit, Voll
  Verlaufsebene: vollständig
  #Prozessdateien prüfen. Standardmäßig werden die Prozessdateien im Ordner „Prozesse“ unter „Ressourcen“ geprüft. check-process-definitions: false

3. Fügen Sie die Integrationskonfiguration des SpringSecurity-Sicherheitsframeworks hinzu

Nachdem Activiti7 in SpringBoot integriert wurde, ist das SpringSecurity-Sicherheitsframework standardmäßig integriert. Daher müssen wir die relevanten von SpringSecurity integrierten Benutzerberechtigungskonfigurationsinformationen vorbereiten.

1) SecurityUtil-Klasse hinzufügen

Eine hinzugefügte Komponente zum schnellen Konfigurieren des SpringSecurity-Sicherheitsframeworks.

@Komponente
öffentliche Klasse SecurityUtil {

  privater Logger-Logger = LoggerFactory.getLogger (SecurityUtil.class);

  @Autowired
  @Qualifier("meinBenutzerdetailsdienst")
  privater UserDetailsService BenutzerDetailsService;

  public void logInAs(String Benutzername) {

    UserDetails Benutzer = userDetailsService.loadUserByUsername(Benutzername);
    wenn (Benutzer == null) {
      throw new IllegalStateException("Benutzer " + Benutzername + " existiert nicht, bitte geben Sie einen gültigen Benutzer ein");
    }
    logger.info("> Angemeldet als: " + Benutzername);
    SecurityContextHolder.setContext(neu SecurityContextImpl(neu Authentifizierung() {
      @Überschreiben
      öffentliche Sammlung<? erweitert GrantedAuthority> getAuthors() {
        gibt user.getAuthorities() zurück;
      }

      @Überschreiben
      öffentliches Objekt getCredentials() {
        Benutzer zurückgeben.getPassword();
      }

      @Überschreiben
      öffentliches Objekt getDetails() {
        Benutzer zurückgeben;
      }

      @Überschreiben
      öffentliches Objekt getPrincipal() {
        Benutzer zurückgeben;
      }

      @Überschreiben
      öffentlicher Boolescher Wert ist authentifiziert() {
        gibt true zurück;
      }

      @Überschreiben
      public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {

      }

      @Überschreiben
      öffentliche Zeichenfolge getName() {
        Benutzer zurückgeben.getUsername();
      }
    }));
    org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(Benutzername);
  }
}

Diese Klasse finden Sie im offiziell von Activiti7 bereitgestellten Beispiel.

2) Fügen Sie die Klasse DemoApplicationConfig hinzu

Seine Aufgabe besteht darin, die Konfiguration der Benutzerberechtigungen des SpringSecurity-Frameworks zu implementieren, damit wir Benutzerberechtigungsinformationen im System verwenden können

@Konfiguration
öffentliche Klasse DemoApplicationConfiguration {

  privater Logger-Logger = LoggerFactory.getLogger (DemoApplicationConfiguration.class);

  @Bohne
  öffentlicher UserDetailsService meinUserDetailsService() {

    InMemoryUserDetailsManager inMemoryUserDetailsManager = neuer InMemoryUserDetailsManager();

    String[][] BenutzerGruppenUndRollen = {
        {"salaboy", "Passwort", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"ryandawsonuk", "Passwort", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"erdemedeiros", "Passwort", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},
        {"anderes", "Passwort", "ROLE_ACTIVITI_USER", "GROUP_anderesTeam"},
        {"system", "password", "ROLE_ACTIVITI_USER"},
        {"admin", "password", "ROLE_ACTIVITI_ADMIN"},
    };

    für (String[] Benutzer : BenutzerGruppenUndRollen) {
      List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(Benutzer, 2, Benutzer.Länge));
      logger.info("> Neuer Benutzer wird registriert: " + user[0] + " mit den folgenden Authorities[" + authoritiesStrings + "]");
      inMemoryUserDetailsManager.createUser(neuer Benutzer(Benutzer[0], passwordEncoder().encode(Benutzer[1]),
          authoritiesStrings.stream().map(s -> neue SimpleGrantedAuthority(s)).collect(Collectors.toList())));
    }


    inMemoryUserDetailsManager zurückgeben;
  }


  @Bohne
  öffentlicher PasswordEncoder passwordEncoder() {
    gibt neuen BCryptPasswordEncoder() zurück;
  }

}

4) Erstellen Sie eine Testklasse

@SpringBootTest
@Slf4j
Klasse ActivitiApplicationTests {

  @Autowired
  private ProzessEngine ProzessEngine;

  /**
   * Bereitstellung der Prozessdefinition */
  @Prüfen
  public void erstelleBereitstellung() { 
    RepositoryService repositoryService = processEngine.getRepositoryService();

    Bereitstellung Bereitstellung = repositoryService.createDeployment()
        .addClasspathResource("diagram/holiday.bpmn")//BPMN-Ressourcen hinzufügen.addClasspathResource("diagram/holiday.png")
        .name("Prozess des Urlaubsantragsformulars")
        .einsetzen(); 
        
    log.info("Prozessbereitstellungs-ID:" + deployment.getName());
    log.info("Name der Prozessbereitstellung:" + deployment.getId());
  }
}

Laufergebnisse:

Aufgetretene Probleme:

1) Die Verlaufstabelle wird nicht standardmäßig generiert und muss in application.yml konfiguriert werden

Frühling:
 Aktivitäten:
  #Überprüfen Sie, ob die Verlaufstabelle vorhanden ist db-history-used: true
  #Aufzeichnungsverlaufsebene Die konfigurierbaren Verlaufsebenen sind Keine, Aktivität, Audit, Voll
  Verlaufsebene: vollständig

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Verwenden Sie Springboot Activiti, um den automatischen Bereitstellungsmodus zur Überprüfung zu schließen
  • Integriertes Aktivitätsprozessdiagramm von Springboot
  • SpringBoot integrierter Activiti-Beispielcode
  • Analyse des Integrationsprozesses von Spring und Activiti
  • Springboot integriert den automatischen Bereitstellungs- und Bereitstellungsdateibenennungsprozess für Aktivitäten

<<:  jQuery erzielt einen Bildlaufwiedergabeeffekt auf großem Bildschirm

>>:  Detaillierte Erklärung der referenziellen Integrität in SQL (eins-zu-eins, eins-zu-viele, viele-zu-viele)

Artikel empfehlen

Analyse der Gründe, warum MySQL-Felddefinitionen nicht null verwenden sollten

Warum wird NULL so oft verwendet? (1) Javas Null ...

Lösung für das Problem, dass HTML2-Canvas-SVG nicht erkannt wird

Es gibt eine neue Funktion, die das Erfassen eine...

So verwalten Sie mehrere Projekte auf dem CentOS SVN-Server

Eine Forderung Im Allgemeinen hat ein Unternehmen...

Vue+Openlayer verwendet modify, um den gesamten Code des Elements zu ändern

Vue+Openlayer verwendet „modify“, um Elemente zu ...

Einführungstutorial zu React Hooks

Zustandshaken Beispiele: importiere { useState } ...

Untersuchung der MySQL-Paging-Leistung

Mehrere gängige Paging-Methoden: 1. Rolltreppenme...

Die vollständige Liste der MIME-Typen

Was ist ein MIME-TYP? 1. Zunächst müssen wir vers...

MySQL 5.7.17 Installations- und Konfigurations-Tutorial unter CentOS6.9

CentOS6.9 installiert Mysql5.7 zu Ihrer Informati...

Ubuntu 15.04 öffnet den MySQL-Remote-Port 3306

Ubuntu 15.04 öffnet den MySQL-Remote-Port 3306. A...

Beispiel-Tutorial für MySQL-Datenbanktransaktionen

Inhaltsverzeichnis 1. Was ist eine Transaktion? 2...

Detaillierte Erklärung der Truncate-Verwendung in MySQL

Vorwort: Wenn wir eine Tabelle löschen möchten, v...

Einführung in die CentOS7-Firewall und portbezogene Befehle

Inhaltsverzeichnis 1. Überprüfen Sie den aktuelle...

Implementierung von Portalen und Fehlergrenzbehandlung in React

Inhaltsverzeichnis Portale Fehlergrenzenbehandlun...