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

Beispiel zum Erstellen und Ausführen mehrerer MySQL-Container in Docker

1. Verwenden Sie das Image mysql/mysql-server:lat...

Einige Tipps zur Beschleunigung der Entwicklung von WeChat-Miniprogrammen

1. Erstellen Sie eine Seite mit app.json Gemäß un...

Vue-Beispielcode zur einfachen Implementierung von virtuellem Scrollen

Inhaltsverzeichnis Vorwort Rollprinzip erreichen ...

Verständnis und Anwendungsszenarien von Enumerationstypen in TypeScript

Inhaltsverzeichnis 1. Was ist 2. Verwendung Numer...

Diagramm des Installations- und Verwendungstutorials für MySQL 8.0.17

Vorne geschrieben In der Vergangenheit und in akt...

CSS zum Erzielen des Effekts einer rotierenden Flip-Card-Animation

Die CSS-Animation des rotierenden Flip-Effekts, d...

Detaillierte Schritte zur Installation von RabbitMQ im Docker

Inhaltsverzeichnis 1. Finde den Spiegel 2. Laden ...

So richten Sie Textfelder in mehreren Formularen in HTML aus

Der Formularcode ist wie in der Abbildung dargest...

Details zum MySQL-Datentyp

Inhaltsverzeichnis 1. Numerischer Typ 1.1 Klassif...

So können Sie lange Vue-Listen schnell laden

Inhaltsverzeichnis Hintergrund Hauptinhalt 1. Kom...

Tutorial zu HTML-Tabellen-Tags (8): Hintergrundbild-Attribut BACKGROUND

Legen Sie ein Hintergrundbild für die Tabelle fes...