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

So verhindern Sie Event-Bubbling in JavaScript

Wir müssen darauf achten, dass die Eigenschaften ...

Verwendung und Demonstration von ref in Vue

Ref-Definition: Wird verwendet, um Referenzinform...

Einführung in die Verwendung des HTML-Basistags target=_parent

Der <base>-Tag gibt die Standardadresse oder...

18 Web-Usability-Prinzipien, die Sie kennen müssen

Sie können über die besten visuellen Designfähigk...

Vue verwendet Canvas, um den Bildkomprimierungs-Upload zu realisieren

In diesem Artikel wird der spezifische Code von V...

NestJs verwendet Mongoose zum Betrieb von MongoDB

Ich habe vor Kurzem angefangen, das NestJs-Framew...

So verwenden Sie DQL-Befehle zum Abfragen von Daten in MySQL

In diesem Artikel zeigt Ihnen der Blogger die häu...

Zusammenfassung und Beispiele der Kommunikationsmethoden für Vue3-Komponenten

Die Kommunikationsmodi der Vue3-Komponenten sind ...

HTML-Tipps, um Ihren Code semantisch zu gestalten

HTML-Semantik scheint ein alltägliches Problem zu...