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 spielen Sie lokale Mediendateien (Video und Audio) mit HTML und JavaScript ab

Erstens kann JavaScript aus Sicherheitsgründen ni...

Vue implementiert bidirektionale Datenbindung

In diesem Artikelbeispiel wird der spezifische Co...

So erhalten und verwenden Sie die Zeit im Linux-System

Es gibt zwei Arten von Linux-Systemzeiten. (1) Ka...

Beispiel für die Integration von Kafka mit Nginx

Hintergrund nginx-kafka-module ist ein Plug-In fü...

Einführung in die MySQL-Operatoren <> und <=>

<> Operator Funktion: Zeigt an, dass es ung...

Warum sollten MySQL-Felder NOT NULL verwenden?

Ich habe vor Kurzem in einer neuen Firma angefang...

Detaillierte Erläuterung des Lesevorgangs für Nginx-Anforderungsheaderdaten

Im vorherigen Artikel haben wir erklärt, wie ngin...

Erfahren Sie, wie Sie Docker unter Windows 10 Home Edition installieren.

Als ich die Bücher über Redis und Spring Cloud Al...

react-beautiful-dnd implementiert die Drag-and-Drop-Funktion für Komponenten

Inhaltsverzeichnis 1. Installation 2.API 3. reagi...

Lösung für das MySQL-Anmeldewarnungsproblem

1. Einleitung Wenn wir uns bei MySQL anmelden, wi...