CICS-Java-Anwendung ausführen- (4) Spring Boot-App

Einführung

CICS TS für z / OS unterstützt die Ausführung von Liberty, sodass Sie Java EE-Anwendungen auf CICS ausführen können. Mit der Unterstützung von Spring Boot von CICS TS V5.3 können Spring Boot-Anwendungen jetzt auf CICS ausgeführt werden (mit Liberty auf CICS). Das Ausführen unter CICS bedeutet, dass JCICS verwendet werden kann, das die Funktionen von CICS verwendet. Daher können Web-Apps, die vorhandene CICS-Programme aufrufen, Web-Apps, die auf VSAM und TSQ zugreifen, die von CICS verwaltet werden, usw. nur mit CICS ausgeführt werden. Dies bedeutet auch, dass Sie es mit dem Spring Boot-Framework entwickeln können.

In diesem Artikel werde ich ein Beispiel der CICS-Spring Boot-App ausführen, die unten auf GitHub bereitgestellt wird. cics-java-liberty-springboot-jcics

Sowohl Maven als auch Gradle können zum Verwalten von Builds verwendet werden, aber jetzt verwenden wir Gradle.

In Verbindung stehender Artikel

CICS-Java-Anwendung ausführen- (1) Einfache Beispiel-App ausführen CICS-Java-Anwendung ausführen - (2) Build-Verwaltung durch Maven CICS-Java-Anwendung ausführen - (3) Build-Verwaltung von Gradle CICS-Run Java-Anwendung- (4) Spring Boot-Anwendung

Vorbereitungen

Entwicklungsumgebung (PC)

Geeignete Java EE-Entwicklungsumgebung

Bitte verwenden Sie Eclipse, VS-Code usw., mit denen Sie je nach Bedarf Java EE-Anwendungen entwickeln können. Da wir das Beispiel so verwenden, wie es diesmal ist, werden wir die Quelle nicht speziell bearbeiten, so dass wir es nicht verwenden müssen, aber normalerweise werden wir eine Art Entwicklungsumgebung verwenden. Es wäre schön, mit Gradle, Git usw. arbeiten zu können. Wenn Sie CICS Explorer zusammen verwenden möchten, können Sie Eclipse verwenden.

CICS Explorer

Dies ist ebenfalls nicht erforderlich, kann jedoch zum Überprüfen der Ressourcendefinition von CICS verwendet werden. Laden Sie ein Eclipse-basiertes Tool namens CICS Explorer herunter und richten Sie es ein, indem Sie auf die folgenden Bereiche verweisen. Referenz: CICS Explorer herunterladen und starten

Gradle Führen Sie zur Installation die folgenden Schritte aus. Installing Gradle Entpacken Sie einfach das heruntergeladene und führen Sie es durch den Pfad.

Voraussetzung ist Java 8 oder höher.

c:\>java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

Laden Sie die aktuellste Version von Gradle V6.5 von der folgenden Version herunter (gradle-6.5.zip). Releases

Extrahieren Sie es in ein geeignetes Verzeichnis. (Hier (c: \ x \ Gradle \ gradle-6.5 ) Fügen Sie den Zielbehälter (C: \ x \ Gradle \ gradle-6.5 \ bin) zu Ihrem PFAD hinzu.

Bestätigung

c:\>gradle -v

------------------------------------------------------------
Gradle 6.5
------------------------------------------------------------

Build time:   2020-06-02 20:46:21 UTC
Revision:     a27f41e4ae5e8a41ab9b19f8dd6d86d7b384dad4

Kotlin:       1.3.72
Groovy:       2.5.11
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          1.8.0_144 (Oracle Corporation 25.144-b01)
OS:           Windows 10 10.0 amd64

Das ist in Ordnung.

git

Wir werden das auf gitHub bereitgestellte Beispiel erhalten und verwenden, also installieren Sie auch git. Die Setup-Methode wird weggelassen, da sie herumliegt.

c:\>git --version
git version 2.21.0.windows.1

Ausführungsumgebung (z / OS, CICS)

Bereiten Sie eine CICS-Region vor, um das Beispiel auszuführen. Im Moment verwenden wir eine Region mit dem Namen ** CT56B4A1 ** unter CICSplex-Kontrolle. Fügen Sie eine Ressource namens JVMServer hinzu, um Java-Anwendungen auszuführen. Dieses Mal verwenden wir das Beispiel für CICS-Liberty (JavaEE-Anwendung). Erstellen Sie daher einen JVM-Server für Liberty.

JVM-Profil

Bereiten Sie das JVM-Profil auf USS vor. (Die mit JVMServer verbundenen Eigenschaften werden effektiv in der Datei auf dieser USS angegeben. Die JVMSERVER-Ressourcendefinition zeigt auf den Dateinamen dieses JVM-Profils.) Ein Beispiel wird mitgeliefert. Kopieren Sie es und verwenden Sie es.

Erstellen Sie ein Verzeichnis mit dem Namen / var / cicsts / cicsts56 / CT56B4A1 / JVMProfiles und kopieren Sie /usr/lpp/cicsts/cicsts56/JVMProfiles/DFHOSGI.jvmprofile (Beispieldefinition für OSGi im CCD-Installationsverzeichnis) dorthin. Machen. Passen Sie es an Ihre Umgebung an.

DFHWLP.jvmprofile Auszug


JAVA_HOME=/usr/lpp/java/J8.0_64/
WORK_DIR=/var/cicsts/cicsts56/CT56B4A1/work
WLP_INSTALL_DIR=/usr/lpp/cicsts/cicsts56/wlp
-Dcom.ibm.cics.jvmserver.wlp.autoconfigure=true
-Dcom.ibm.cics.jvmserver.wlp.server.host=*
-Dcom.ibm.cics.jvmserver.wlp.server.http.port=56441
-Dcom.ibm.cics.jvmserver.wlp.server.https.port=56451
-Xms128M
-Xmx256M
-Xmso1M
-Xgcpolicy:gencon
-Xscmx256M
-Xshareclasses:name=cicsts%g,groupAccess,nonfatal
-Xtune:virtualized
-Dcom.ibm.tools.attach.enable=no
-Dfile.encoding=ISO-8859-1
_BPXK_DISABLE_SHLIB=YES

SIT

Geben Sie im SIT-Parameter "JVMPROFILEDIR" das Verzeichnis an, in dem sich die obige Eigenschaftendatei befindet.

JVMPROFILEDIR=/var/cicsts/cicsts56/CT56B4A1/JVMProfiles 

Starten Sie die Region neu, damit die Änderungen wirksam werden.

JVM-Serverdefinition

Bereiten Sie die JVMSERVER-Ressourcendefinition vor. Kopieren Sie die JVMSERVER-Definition "DFHWLP" in der vom Produkt bereitgestellten DFH $ WLP-Gruppe in eine entsprechende Gruppe und installieren Sie sie.

OBJECT CHARACTERISTICS                                    CICS RELEASE = 0730
 CEDA  View JVmserver( DFHWLP   )                                            
  JVmserver      : DFHWLP                                                    
  Group          : TAGGRP                                                    
  DEScription    : CICS JVM server to run WLP samples                        
  Status         : Enabled            Enabled | Disabled                     
  Jvmprofile     : DFHWLP                                         (Mixed Case
  Lerunopts      : DFHAXRO                                                   
  Threadlimit    : 015                1-256                                  
 DEFINITION SIGNATURE                                                        
  DEFinetime     : 06/04/20 16:20:21                                         
  CHANGETime     : 06/04/20 16:20:21                                         
  CHANGEUsrid    : CICSUSER                                                  
  CHANGEAGEnt    : CSDApi             CSDApi | CSDBatch                      
  CHANGEAGRel    : 0730                                                                     

Es ist in Ordnung, wenn es unter CEMT I JVMSERVER aktiviert ist.

I JVMS                                             
STATUS:  RESULTS - OVERTYPE TO MODIFY              
 Jvm(DFHWLP  ) Ena     Prf(DFHWLP  ) Ler(DFHAXRO ) 
    Threadc(005) Threadl( 015 ) Cur(48314096)           

Ändern Sie server.xml

In dieser Beispielausführungsprozedur handelt es sich um eine Prozedur, die manuell bereitgestellt wird, anstatt automatisch bereitzustellen. Fügen Sie daher die entsprechende Einstellung hinzu.

Wenn Sie in Ihrem JVM-Profil "-Dcom.ibm.cics.jvmserver.wlp.autoconfigure = true" angeben, wird Liberty automatisch konfiguriert. Sobald die JVMSERVER-Definition installiert ist, wird Liberty im Arbeitsverzeichnis konfiguriert (work / CT56B4A1 / DFHWLP / wlp / usr / servers / defaultServer). Ändern Sie die Datei server.xml in diesem Verzeichnis so, dass sie folgendermaßen aussieht:

server.xml


...
<applicationMonitor dropins="dropins" dropinsEnabled="true" pollingRate="5s" updateTrigger="polled"/>
...

Geben Sie auf diese Weise dropEnabled = "true", updateTrigger = "polled" an. Dadurch wird automatisch der Krieg im Drop-Verzeichnis erkannt. Erstellen Sie ein Drop-Verzeichnis im selben Verzeichnis (... / work / CT56B4A1 / DFHWLP / wlp / usr / servers / defaultServer / drop).

Starten Sie den JVM-Server neu, nachdem Sie Änderungen vorgenommen haben.

CICS Bundle Deployment API Sie müssen die CICS Bundle Deployment API eingerichtet haben, die in CICS TS V5.6 verfügbar ist. (Nicht erforderlich für die manuelle Bereitstellung des Beispielverfahrens) Diese Funktion wurde für die Anwendungsbereitstellung als eine der REST-basierten Verwaltungs-APIs namens CMCI hinzugefügt. Richten Sie CMCI auf dem WUI-Server ein, der die Ziel-CICS-Region verwaltet, und geben Sie in den Eigenschaften des CMCI-JVM-Servers die Parameter für die CICS-Bundle-Bereitstellungs-API an. Referenz: Funktionsweise: CICS-Bundle-Bereitstellungs-API

Die minimal erforderlichen Einstellungen sind wie folgt. Erstellen Sie auf USS ein Verzeichnis für die Platzierung von Bundle-Dateien. Hier ist es "/ var / cicsts / cicsts56 / bundles". Legen Sie die folgenden Parameter im JVM-Profil (EYUCMCIJ.jvmprofile) für den CMCI-JVM-Server der WUI fest. -Dcom.ibm.cics.jvmserver.cmci.bundles.dir=/var/cicsts/cicsts56/bundles

Beispielbetriebsprüfung (1) / Manuelle Bereitstellung

Versuchen Sie zunächst, die auf github angegebenen Schritte auszuführen. Referenz: cics-java-liberty-springboot-jcics

Lokales Klonen

Erstellen Sie ein geeignetes Verzeichnis und klonen Sie "https: // github.com / cicsdev / cics-java-liberty-springboot-jcics.git" auf Ihrem lokalen PC.

c:\y\workspace\cicsts56>git clone https://github.com/cicsdev/cics-java-liberty-springboot-jcics.git
Cloning into 'cics-java-liberty-springboot-jcics'...
remote: Enumerating objects: 67, done.
remote: Counting objects: 100% (67/67), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 67 (delta 12), reused 56 (delta 7), pack-reused 0
Unpacking objects: 100% (67/67), done.

Grundlegendes zur Dateistruktur

Gehen Sie in das Verzeichnis "cics-java-liberty-springboot-jcics" und sehen Sie sich die Struktur der Datei an.

c:\y\workspace\cicsts56\cics-java-liberty-springboot-jcics>tree /f /a
Liste der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumens lautet 1866-E2FC
C:.
|   .classpath
|   .gitignore
|   .project
|   build.gradle
|   gradlew
|   gradlew.bat
|   LICENSE
|   mvnw
|   mvnw.cmd
|   pom.xml
|   README.md
|   settings.gradle
|
+---.mvn
|   \---wrapper
|           maven-wrapper.jar
|           maven-wrapper.properties
|           MavenWrapperDownloader.java
|
+---.settings
|       org.eclipse.buildship.core.prefs
|       org.eclipse.wst.common.component
|       org.eclipse.wst.common.project.facet.core.xml
|
+---gradle
|   \---wrapper
|           gradle-wrapper.jar
|           gradle-wrapper.properties
|
\---src
    \---main
        +---java
        |   \---com
        |       \---ibm
        |           \---cicsdev
        |               \---springboot
        |                   \---jcics
        |                           Application.java
        |                           BrowseTSQController.java
        |                           DeleteTSQController.java
        |                           ServletInitializer.java
        |                           TSQInfoController.java
        |                           WriteTSQController.java
        |
        \---webapp
            \---WEB-INF
                    ibm-web-ext.xml
                    web.xml

Es ist ein One-Shot-Projekt des Anwendungsteils. Enthält nicht das CICS Bundle-Projekt. Es scheint, dass es sowohl Maven als auch Gradle unterstützt, aber hier werden wir Gradle verwenden.

Inhalt prüfen / bearbeiten

Es gibt mehrere Quellen, aber schauen wir uns zum Beispiel WriteTSQController.java an. Dies ist nur ein Blick.

WriteTSQController.java


/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* SAMPLE                                                                 */
/*                                                                        */
/* (c) Copyright IBM Corp. 2020 All Rights Reserved                       */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or disclosure */
/* restricted by GSA ADP Schedule Contract with IBM Corp                  */
/*                                                                        */

package com.ibm.cicsdev.springboot.jcics;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.ibm.cics.server.CicsConditionException;
import com.ibm.cics.server.TSQ;

@RestController
public class WriteTSQController {

	/**
	 * The @GetMapping annotation ensures that HTTP GET requests are mapped to the annotated method. 
	 * @throws IOException 
	 **/
	@GetMapping("/writeTSQs")
	public String writeTSQs(@RequestParam(value = "tsqName", defaultValue = "ANNE") String tsqName,
			@RequestParam(value = "tsqContent", defaultValue = "Spring greetings from CICS!") String tsqContent) {

		String response = "";

		// Write to the TSQ
		try {
			response = writeTSQ(tsqName, tsqContent);
		} catch ( CicsConditionException | UnsupportedEncodingException e) {

			// Print the stack trace
			e.printStackTrace();

			// Return useful information to the user when meeting errors
			return "Oops! Unexpected CICS condition exception: "  + e.getMessage() + ". Please check stderr for details.";
		}
		return response;
	}

	/**
	 * A method to write a record to a TSQ
	 * 
	 * @param tsqName, the name of the TSQ to be written to
	 * @param record, the data to be written to the TSQ
	 * @return, the result of the write 
	 * @throws UnsupportedEncodingException 
	 * @throws CicsConditionException	   
	 */
	private String writeTSQ(String tsqName, String record) throws CicsConditionException, UnsupportedEncodingException{
		
		// Construct the TSQ object
		TSQ tsqQ = new TSQ();
		tsqQ.setName(tsqName);

		// the result of writing an item to the TSQ
		String result = "";

		// write the record to the TSQ
		tsqQ.writeString(record);		
		result = "Record written to TSQ " + tsqName + ".";

		// return the result to the calling servlet
		return result;
	}
}

Es ist eine einfache Anwendung, die nur Daten mit der TSQ-Klasse von JCICS in TSQ schreibt. Der Abfrageparameter des URI / writeTSQs empfängt tsqName und tsqContent und schreibt den von tsqContent angegebenen Wert in die von tsqName angegebene TSQ.

Überprüfen Sie den Kontextstamm in ibm-web-ext.xml. Dies ist auch nur eine Bestätigung.

ibm-web-ext.xml


<?xml version="1.0" encoding="UTF-8"?>
<web-ext
	xmlns="http://websphere.ibm.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-web-ext_1_0.xsd"
	version="1.0">

	<reload-interval value="3"/>
	<context-root uri="cics-java-liberty-springboot-jcics-ding" />
	<enable-directory-browsing value="false"/>
	<enable-file-serving value="true"/>
	<enable-reloading value="true"/>
	<enable-serving-servlets-by-class-name value="false" />

</web-ext>

Öffnen Sie build.gradle und bearbeiten Sie die Abhängigkeitsspezifikationen entsprechend der CICS-Zielversion. Da wir hier auf CICS TS V5.6 abzielen, ändern Sie es wie folgt.

build.gradle


...
compileOnly enforcedPlatform("com.ibm.cics:com.ibm.cics.ts.bom:5.6-20200609123739")
...

Der anzugebende Wert wird anhand der folgenden Punkte beurteilt. Referenz: IBM CICS TS-Stückliste

Bauen

Erstellen Sie mit dem folgenden Befehl.

c:\y\workspace\cicsts56\cics-java-liberty-springboot-jcics>gradlew.bat clean bootwar
Downloading https://services.gradle.org/distributions/gradle-6.5-bin.zip
.........10%..........20%..........30%..........40%.........50%..........60%..........70%..........80%.........90%..........100%
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 1m 35s
3 actionable tasks: 2 executed, 1 up-to-date

Bei Erfolg wird das folgende WAR erstellt. build/libs/cics-java-liberty-springboot-jcics-0.1.0.war

Bereitstellen

In diesem Beispiel wird die WAR manuell bereitgestellt. Versuchen wir es also.

Übertragen Sie die obige WAR-Datei im Binärmodus in das zuvor erstellte Drop-Verzeichnis. Die App sollte nun automatisch erkannt werden. (Die BUNDLE-Definition wird für diese Methode nicht verwendet.)

App-Funktionsprüfung

Versuchen Sie im Browser, die folgende Anfrage an den Host zu richten: Port, den das Ziel Liberty abhört. http://etp1:56441/cics-java-liberty-springboot-jcics-ding/writeTSQs?tsqName=SPGJCICS&tsqContent=ILOVECICS Sie werden die Nachricht ILOVECICS in die TSQ mit dem Namen SPGJCICS einfügen. Hoffentlich werden die Daten in TSQ geschrieben. Überprüfen Sie sie daher mit CEBR vom CICS-Terminal aus. image.png Es wurde bestätigt, dass die Daten ordnungsgemäß eingegeben wurden.

Beispielbetriebsprüfung (2) / Bereitstellung durch Gradle

Übrigens, wenn das oben beschriebene Verfahren abgeschlossen ist, erfolgt die Bereitstellung manuell und ist nicht intelligent. Fügen Sie also ein CICS-Bundle-Projekt hinzu, damit die Bereitstellung mit Gradle ausgeführt werden kann.

Achtung! : Wenn Sie die manuelle Bereitstellung mit dem oben beschriebenen Verfahren versucht haben, schlägt die App. Löschen Sie daher den Krieg im Drop-Verzeichnis und starten Sie JVMSERVER neu. </ font>

Gradle-Multiprojekterstellung

Fügen Sie ein CICS-Bundle-Projekt hinzu und erstellen Sie ein übergeordnetes Projekt, das mit der im Beispiel angegebenen WAR kombiniert werden soll.

Übergeordnetes Projekt

Erstellen Sie zunächst ein Verzeichnis mit dem Namen "cics-springboot01", das übergeordnete Projektverzeichnis. Führen Sie also den Gradle-Wrapper aus.

c:\y\workspace\cicsts56\cics-springboot01>gradle wrapper

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.5/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 6s
1 actionable task: 1 executed
c:\y\workspace\cicsts56\cics-springboot01>tree /a /f
Liste der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumens lautet 1866-E2FC
C:.
|   gradlew
|   gradlew.bat
|
+---.gradle
|   +---6.5
|   |   |   gc.properties
|   |   |
|   |   +---executionHistory
|   |   |       executionHistory.bin
|   |   |       executionHistory.lock
|   |   |
|   |   +---fileChanges
|   |   |       last-build.bin
|   |   |
|   |   +---fileHashes
|   |   |       fileHashes.bin
|   |   |       fileHashes.lock
|   |   |
|   |   \---vcsMetadata-1
|   +---buildOutputCleanup
|   |       buildOutputCleanup.lock
|   |       cache.properties
|   |       outputFiles.bin
|   |
|   +---checksums
|   |       checksums.lock
|   |
|   \---vcs-1
|           gc.properties
|
\---gradle
    \---wrapper
            gradle-wrapper.jar
            gradle-wrapper.properties

Erstellen Sie hier build.gradle und settings.gradle wie unten gezeigt.

build.gradle


group 'com.ibm.cicsdev.springboot'
version '1.0.0'

setting.gradle


rootProject.name = 'cics-springboot01'
include 'cics-java-liberty-springboot-jcics'
include 'cics-springboot-bundle04'

Für Kinderprojekt (1) / WAR

Es wird die im Beispiel angegebene verwendet. Klonen Sie cics-java-liberty-springboot-jcics mit git clone unter das übergeordnete Projektverzeichnis, wie oben beschrieben. Ändern Sie dann die Zeile compileOnly in build.gradle, um sie an die CICS-Zielversion anzupassen.

Für untergeordnetes Projekt (2) / CICS-Bundle

Zu diesem Zweck erstellen wir unter Bezugnahme auf den vorherigen Artikel build.gradle für das Bundle. Referenz: CICS-Java-Anwendung ausführen - (3) Build-Verwaltung durch Gradle

Erstellen Sie unter dem übergeordneten Projektverzeichnis ein Verzeichnis mit dem Namen "cics-springboot-bundle04" und erstellen Sie darin build.gradle, wie unten gezeigt. Ordnen Sie den Verzeichnisnamen dem Namen zu, der in der übergeordneten Einstellung angegeben ist.

build.gradle


plugins {
    id 'com.ibm.cics.bundle' version '1.0.0'
}

group 'com.ibm.cicsdev.springboot'
version '1.0.0'

repositories {
    mavenCentral()
}

cicsBundle {
    build {
        defaultJVMServer = 'DFHWLP' // (1)JVMSERVER Name
    }
    deploy {
        cicsplex = 'C73PLX'         // (2)Der CICSplex-Name, zu dem die Ziel-CICS-Region gehört
        region   = 'CT56B4A1'       // (3)Name der Ziel-CICS-Region
        bunddef  = 'SPBBUNDL'       // (4)Name der Bundle-Definitionsressource, die in der Ziel-CICS-Region definiert ist
        csdgroup = 'TAGGRP'         // (5) (4)CSD-Gruppenname, zu dem die Bundle-Definition von
        url      = 'http://etp1:56002'     // (6)WUI CMCI URL
        username = 'TAG'           // (7)Mit dem Benutzer, der bei der Ausgabe der Bereitstellungs-API durch CMCI verwendet wird
        password = 'xxxxxxxx'      //Passwort
        //caution: uncomment the line below to disable TLS/SSL checking for certificates
        //insecure = true
    }
}

dependencies {
    cicsBundlePart project(path:':cics-java-liberty-springboot-jcics', configuration: 'archives')
}

Die endgültige Struktur wird so aussehen.

c:\y\workspace\cicsts56\cics-springboot01>tree /a /f
Liste der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumens lautet 1866-E2FC
C:.
|   build.gradle
|   gradlew
|   gradlew.bat
|   settings.gradle
|

...

+---cics-java-liberty-springboot-jcics
|   |   .classpath
|   |   .gitignore
|   |   .project
|   |   build.gradle
|   |   build_original.gradle
|   |   gradlew
|   |   gradlew.bat
|   |   LICENSE
|   |   mvnw
|   |   mvnw.cmd
|   |   pom.xml
|   |   README.md
|   |   settings.gradle
|   |
|   +---.gradle
|   |   +---6.5
|   |   |   |   gc.properties
|   |   |   |
|   |   |   +---executionHistory
|   |   |   |       executionHistory.bin
|   |   |   |       executionHistory.lock
|   |   |   |
|   |   |   +---fileChanges
|   |   |   |       last-build.bin
|   |   |   |
|   |   |   +---fileContent
|   |   |   |       fileContent.lock
|   |   |   |
|   |   |   +---fileHashes
|   |   |   |       fileHashes.bin
|   |   |   |       fileHashes.lock
|   |   |   |
|   |   |   +---javaCompile
|   |   |   |       classAnalysis.bin
|   |   |   |       javaCompile.lock
|   |   |   |       taskHistory.bin
|   |   |   |
|   |   |   \---vcsMetadata-1
|   |   +---buildOutputCleanup
|   |   |       buildOutputCleanup.lock
|   |   |       cache.properties
|   |   |       outputFiles.bin
|   |   |
|   |   +---checksums
|   |   |       checksums.lock
|   |   |       md5-checksums.bin
|   |   |       sha1-checksums.bin
|   |   |
|   |   \---vcs-1
|   |           gc.properties
|   |
|   +---.mvn
|   |   \---wrapper
|   |           maven-wrapper.jar
|   |           maven-wrapper.properties
|   |           MavenWrapperDownloader.java
|   |
|   +---.settings
|   |       org.eclipse.buildship.core.prefs
|   |       org.eclipse.wst.common.component
|   |       org.eclipse.wst.common.project.facet.core.xml
|   |
|   +---gradle
|   |   \---wrapper
|   |           gradle-wrapper.jar
|   |           gradle-wrapper.properties
|   |
|   \---src
|       \---main
|           +---java
|           |   \---com
|           |       \---ibm
|           |           \---cicsdev
|           |               \---springboot
|           |                   \---jcics
|           |                           Application.java
|           |                           BrowseTSQController.java
|           |                           DeleteTSQController.java
|           |                           ServletInitializer.java
|           |                           TSQInfoController.java
|           |                           WriteTSQController.java
|           |
|           \---webapp
|               \---WEB-INF
|                       ibm-web-ext.xml
|                       web.xml
|
+---cics-springboot-bundle04
|       build.gradle
|
\---gradle
    \---wrapper
            gradle-wrapper.jar
            gradle-wrapper.properties

Erstellung der BUNDLE-Definition

Erstellen Sie eine Bundle-Definition gemäß dem in build.gradle oben angegebenen Inhalt.

OBJECT CHARACTERISTICS                                    CICS RELEASE = 0730 
 CEDA  View Bundle( SPBBUNDL )                                                
  Bundle         : SPBBUNDL                                                   
  Group          : TAGGRP                                                     
  DEScription    : CICS-SpringBoot-Sample                                     
  Status         : Enabled            Enabled | Disabled                      
  BUndledir      : /var/cicsts/cicsts56/bundles/cics-springboot-bundle04_1.0. 
  (Mixed Case)   : 0                                                          
                 :                                                            
                 :                                                            
                 :                                                            
  BAsescope      :                                                            
  (Mixed Case)   :                                                            
                 :                                                            
                 :                                                            
                 :                                                            
 DEFINITION SIGNATURE                                                         
  DEFinetime     : 07/07/20 17:03:45                                          
  CHANGETime     : 07/07/20 17:03:57                                          
                                                                              
                                                    SYSID=B4A1 APPLID=CT56B4A1
                              DSN=CICSTS56.CICS.DFHCSD                        

Die CSD-Gruppe wird angegeben (5), der Name der BUNDLE-Definition lautet (4) und BUNDLEDIR wird basierend auf dem Namen des Projektverzeichnisses und dem Wert der Versionsinformationen angegeben.

  • Hier wird der Installationsvorgang noch nicht durchgeführt.

Ausführung erstellen / bereitstellen

Erstellen Sie das Spring Boot WAR wie folgt.

c:\y\workspace\cicsts56\cics-springboot01>gradlew bootWar

BUILD SUCCESSFUL in 6s
2 actionable tasks: 2 executed

Erstellen Sie dann das CICS-Bundle und stellen Sie es bereit.

c:\y\workspace\cicsts56\cics-springboot01>gradlew deployCICSBundle

> Task :cics-springboot-bundle04:buildCICSBundle
Adding Java-based bundle parts from 'cicsBundlePart' dependency configuration
Adding Java-based bundle part: 'C:\y\workspace\cicsts56\cics-springboot01\cics-java-liberty-springboot-jcics\build\libs\cics-java-liberty-springboot-jcics-0.1.0.war'
Adding non-Java-based bundle parts from 'src/main/resources'

> Task :cics-springboot-bundle04:deployCICSBundle
Task deployCICSBundle

BUILD SUCCESSFUL in 29s
4 actionable tasks: 3 executed, 1 up-to-date

Es ist in Ordnung, wenn Sie bestätigen können, dass das Bundle und die Bundle-Teile im CICS Explorer AKTIVIERT sind. image.png

Sie können es mit Gradle bereitstellen!

Übrigens, wenn Sie sich Libertys messages.log ansehen, können Sie sehen, dass die Spring Boot-App ausgeführt wird.

[7/7/20 9:20:35:354 GMT] 000000d0 LogService-87-com.ibm.cics.wlp.bundlepart.impl               I CWWKE0703I: [com.ibm.cics.wlp.bundlepart.impl] [CICSLibertyBundlepartControllerImpl] @Info : installBundlepart() - cics-java
-liberty-springboot-jcics-0.1.0, SPBBUNDL, 2, /var/cicsts/cicsts56/bundles/cics-springboot-bundle04_1.0.0/, 1.0.0, 206F2740000001E9, , , -1, -1, -1, CSD_API
[7/7/20 9:20:35:376 GMT] 000000d1 LogService-87-com.ibm.cics.wlp.bundlepart.impl               I CWWKE0703I: [com.ibm.cics.wlp.bundlepart.impl] [CICSLibertyBundlepartControllerImpl] @Info : enableBundlepart() - 3549516473

[7/7/20 9:20:36:381 GMT] 00000055 com.ibm.ws.app.manager.AppMessageHelper                      I CWWKZ0018I: Starting application cics-java-liberty-springboot-jcics-0.1.0.
[7/7/20 9:20:36:382 GMT] 00000055 bm.ws.app.manager.war.internal.WARDeployedAppInfoFactoryImpl I CWWKZ0136I: The cics-java-liberty-springboot-jcics-0.1.0 application is using the archive file at the /var/cicsts/cicsts56/C
T56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/installedApps/cics-java-liberty-springboot-jcics-0.1.0.war location.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.webcontainer.osgi.webapp.WebGroup                 I SRVE0169I: Loading Web Module: cics-java-liberty-springboot-jcics.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.webcontainer                                      I SRVE0250I: Web Module cics-java-liberty-springboot-jcics has been bound to default_host.
[7/7/20 9:20:36:723 GMT] 00000055 com.ibm.ws.http.internal.VirtualHostImpl                     A CWWKT0016I: Web application available (default_host): http://etp1:56441/cics-java-liberty-springboot-jcics-ding/
[7/7/20 9:20:36:725 GMT] 00000055 com.ibm.ws.app.manager.AppMessageHelper                      A CWWKZ0003I: The application cics-java-liberty-springboot-jcics-0.1.0 updated in 0.344 seconds.
[7/7/20 9:20:36:733 GMT] 0000004d com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator          I SRVE9103I: A configuration file for a web server plugin was automatically generated for this server at /var/cicsts/cicsts56/
CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/logs/state/plugin-cfg.xml.
[7/7/20 9:20:36:800 GMT] 0000004b com.ibm.ws.session.WASSessionCore                            I SESN0176I: A new session context will be created for application key default_host/cics-java-liberty-springboot-jcics-ding
[7/7/20 9:20:36:801 GMT] 0000004b com.ibm.ws.util                                              I SESN0172I: The session manager is using the Java default SecureRandom implementation for session ID generation.
[7/7/20 9:20:37:064 GMT] 0000004b com.ibm.ws.webcontainer.webapp                               I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.2 Spring WebApplicationInitializers detected on cla
sspath
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O   .   ____          _            __ _ _
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O   '  |____| .__|_| |_|_| |_\__, | / / / /
[7/7/20 9:20:37:973 GMT] 0000004b SystemOut                                                    O  =========|_|==============|___/=/_/_/_/
[7/7/20 9:20:37:974 GMT] 0000004b SystemOut                                                    O  :: Spring Boot ::        (v2.3.0.RELEASE)
[7/7/20 9:20:38:131 GMT] 0000004b SystemOut                                                    O 2020-07-07 09:20:38.128  INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer         : Starting ServletInit
ializer on etp1.tsc.ibm.com with PID 83952403 (/var/cicsts/cicsts56/CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/defaultServer/installedApps/cics-java-liberty-springboot-jcics-0.1.0.war started by STCUSR in /ETP1/var/cic
sts/cicsts56/CT56B4A1/work)
[7/7/20 9:20:38:133 GMT] 0000004b SystemOut                                                    O 2020-07-07 09:20:38.133  INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer         : No active profile se
t, falling back to default profiles: default
[7/7/20 9:20:38:446 GMT] 00000053 com.ibm.ws.config.xml.internal.ConfigRefresher               A CWWKG0016I: Starting server configuration update.
[7/7/20 9:20:38:448 GMT] 00000053 com.ibm.ws.config.xml.internal.XMLConfigParser               A CWWKG0028A: Processing included configuration resource: /var/cicsts/cicsts56/CT56B4A1/work/CT56B4A1/DFHWLP/wlp/usr/servers/d
efaultServer/installedApps.xml
[7/7/20 9:20:38:450 GMT] 00000053 com.ibm.ws.config.xml.internal.ConfigRefresher               A CWWKG0018I: The server configuration was not updated. No functional changes were detected.
[7/7/20 9:20:39:214 GMT] 0000004b com.ibm.ws.webcontainer.webapp                               I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.Initializing Spring embedded WebApplicationContext
[7/7/20 9:20:39:214 GMT] 0000004b SystemOut                                                    O 2020-07-07 09:20:39.214  INFO 83952403 --- [RVICE_Thread-28] o.s.web.context.ContextLoader            : Root WebApplicationC
ontext: initialization completed in 1011 ms
[7/7/20 9:20:39:608 GMT] 0000004b SystemOut                                                    O 2020-07-07 09:20:39.608  INFO 83952403 --- [RVICE_Thread-28] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing Executo
rService 'applicationTaskExecutor'
[7/7/20 9:20:39:847 GMT] 0000004b SystemOut                                                    O 2020-07-07 09:20:39.846  INFO 83952403 --- [RVICE_Thread-28] c.i.c.s.jcics.ServletInitializer         : Started ServletIniti
alizer in 2.638 seconds (JVM running for 3347.897)
[7/7/20 9:25:53:853 GMT] 00000045 com.ibm.ws.webcontainer.webapp                               I SRVE0292I: Servlet Message - [cics-java-liberty-springboot-jcics-0.1.0]:.Initializing Spring DispatcherServlet 'dispatcherSe
rvlet'
[7/7/20 9:25:53:853 GMT] 00000045 SystemOut                                                    O 2020-07-07 09:25:53.853  INFO 83952403 --- [HP.TASK205.CJSA] o.s.web.servlet.DispatcherServlet        : Initializing Servlet
 'dispatcherServlet'
[7/7/20 9:25:53:863 GMT] 00000045 SystemOut                                                    O 2020-07-07 09:25:53.863  INFO 83952403 --- [HP.TASK205.CJSA] o.s.web.servlet.DispatcherServlet        : Completed initializa
tion in 10 ms
[7/7/20 9:25:53:863 GMT] 00000045 com.ibm.ws.webcontainer.servlet                              I SRVE0242I: [cics-java-liberty-springboot-jcics-0.1.0] [/cics-java-liberty-springboot-jcics-ding] [dispatcherServlet]: Initia
lization successful.

App-Funktionsprüfung

Versuchen Sie wie im vorherigen Beispiel, die App auszuführen, die über Ihren Browser in TSQ schreibt. Dieses Mal lautet die zu schreibende Zeichenfolge "I LOVE CCDS2". image.png Das Ergebnis wurde normal zurückgegeben. Als ich vom CICS-Terminal aus mit CEBR nachgesehen habe, konnte ich bestätigen, dass die Daten korrekt geschrieben wurden! image.png

Beispielanpassung

Mit CICS TS V5.5 + APAR PH14856 oder V5.6 können Sie Spring Boot-Apps wie herkömmliche CICS-Programme behandeln, sodass Sie das Spring Boot-Programm mit EXEC CICS LINK oder mit EXEC CICS START aufrufen können Sie können es anrufen. Referenz: Verknüpfen mit einer Java EE- oder Spring Boot-Anwendung aus einem CICS-Programm

Hier versuchen wir ein Szenario, in dem die Spring Boot-App mit EXEC CICS LINK aus einer Sprache wie COBOL aufgerufen wird. Beim Aufrufen der Spring Boot-App mit EXEC CICS LINK wird Channel & Container für die Datenübertragung verwendet. Der Einfachheit halber wird jedoch nur der Programmaufrufteil hinzugefügt und implementiert, ohne dass eine Datenübertragung durchgeführt wird. ..

Ändern Sie server.xml

Bei der Konfiguration zum Aufrufen eines Programms unter Liberty muss "cicsts: link-1.0" als eine Funktion von Liberty hinzugefügt werden, die die Laufzeit darstellt. Fügen Sie eine Funktion wie unten gezeigt hinzu und starten Sie den JVM-Server neu (Deaktiviert => Aktiviert).

server.xml


...
    <featureManager>
        <feature>cicsts:core-1.0</feature>
        <feature>cicsts:defaultApp-1.0</feature>
        <feature>jsp-2.3</feature>
        <feature>wab-1.0</feature>
        <feature>transportSecurity-1.0</feature>
        <feature>cicsts:link-1.0</feature>
    </featureManager>
...

Importieren Sie ein Beispielprojekt in Eclipse

Importieren Sie das oben erwähnte Beispielprojekt von GitHub in Eclipse. Hier verwenden wir Eclipse als CICS-Explorer.

Installieren Sie die Buildship Gradle-Integration vom Eclipse Marketplace. image.png image.png

Klicken Sie in der Paket-Explorer-Ansicht der Java-Perspektive mit der rechten Maustaste auf - Importieren - Projekt aus Ordner oder Archiv, wählen Sie das geklonte Projektverzeichnis aus und importieren Sie es. image.png

Nach dem Import wird ein rotes x angehängt und ein Fehler angezeigt. image.png

Klicken Sie mit der rechten Maustaste auf das Projekt --Gradle --Refresh Gradle Project image.png

Der Fehler ist verschwunden! image.png

Logik hinzufügen

Fügen Sie zunächst eine Abhängigkeit zu build.gradle hinzu. Fügen Sie Abhängigkeiten Folgendes hinzu.

build.gradle


...
dependencies 
{
   ...
    // for @CICSProgram annotation
    compileOnly ("com.ibm.cics:com.ibm.cics.server.invocation.annotations")
    annotationProcessor ("com.ibm.cics:com.ibm.cics.server.invocation:5.6")
}

Führen Sie das Gradle-Projekt aktualisieren aus.

Erstellen Sie die folgenden Dateien im selben Paket wie WriteTSQController.java.

WriteTSQLinked.java


package com.ibm.cicsdev.springboot.jcics;

import org.springframework.stereotype.Component;
import com.ibm.cics.server.CicsConditionException;
import com.ibm.cics.server.TSQ;
import com.ibm.cics.server.invocation.CICSProgram;

@Component
public class WriteTSQLinked {
	
    @CICSProgram("WRTTSQ")
    public void writeTSQlinked()
    {     
		String tsqName = "SPGJCICS";
		String record  = "ILOVECICS3";

		// Write to the TSQ
		try {
			// Construct the TSQ object
			TSQ tsqQ = new TSQ();
			tsqQ.setName(tsqName);

			// write the record to the TSQ
			tsqQ.writeString(record);		
			
		} catch ( CicsConditionException  e) {
			// Print the stack trace
			e.printStackTrace();
		}
    }
}

Die Annotation "@ CICSProgram" bewirkt, dass die Methode unmittelbar nachdem sie als CICS-Programm mit dem Namen "WRTTSQ" erkannt wurde. Wenn Sie es als CICS-Programm erkennen möchten, müssen Sie die Methode mit öffentlicher Spezifikation und ohne Argument definieren. Dieses Mal habe ich die Logik hinzugefügt, um den Wert ILOVECICS3 in die TSQ mit dem Namen SPGJCICS zu schreiben, indem ich ohne Argument eingebettet habe.

Erstellen / Bereitstellen

C:\y\workspace\cicsts56\cics-springboot02>gradlew bootWar

BUILD SUCCESSFUL in 7s
2 actionable tasks: 2 executed
C:\y\workspace\cicsts56\cics-springboot02>gradlew deployCICSBundle

> Task :cics-springboot-bundle04:buildCICSBundle
Adding Java-based bundle parts from 'cicsBundlePart' dependency configuration
Adding Java-based bundle part: 'C:\y\workspace\cicsts56\cics-springboot02\cics-java-liberty-springboot-jcics\build\libs\cics-java-liberty-springboot-jcics-0.1.0.war'
Adding non-Java-based bundle parts from 'src/main/resources'

> Task :cics-springboot-bundle04:deployCICSBundle
Task deployCICSBundle

BUILD SUCCESSFUL in 1m 31s
4 actionable tasks: 3 executed, 1 up-to-date

Wenn der Vorgang abgeschlossen ist, wird das Bundle installiert und WAR wird als Bundle-Teil installiert. Darüber hinaus wird die in "@ CICSProgram" angegebene Methode als CICS-Programm erkannt, sodass das CICS-Programm "WRTTSQ" installiert wird.

image.png

Die Details der installierten Programmdefinition sind wie folgt (überprüfen Sie mit CICS Explorer) image.png

Eine solche Meldung wird im JOBLOG der Zielregion angezeigt.

DFHRL0107 I 07/08/2020 15:40:30 CT56B4A1 CICSUSER The CICS resource lifecycle manager has started to create the BUNDLE resource    
           SPBBUNDL.                                                                                                               
DFHRL0125 I 07/08/2020 15:40:30 CT56B4A1 CICSUSER BUNDLE resource SPBBUNDL is being created with BUNDLEID cics-springboot-bundle04 
           and version 1.0.0.                                                                                                      
DFHSJ1105 07/08/2020 15:40:30 CT56B4A1 WAR bundle cics-java-liberty-springboot-jcics-0.1.0 version 1.0.0 from BUNDLE SPBBUNDL has  
           been installed as Disabled.                                                                                             
DFHRL0108 I 07/08/2020 15:40:30 CT56B4A1 CONL The CICS resource lifecycle manager is in the process of creating the BUNDLE resource
           SPBBUNDL and the BUNDLE is in the enabling state.                                                                       
DFHRD0128 I 07/08/2020 15:40:30 CT56B4A1  CICSUSER CONL INSTALL BUNDLE(SPBBUNDL)                                                   
???? ??? CONL CICSUSER 07/08/20 15:40:30 INSTALL BUNDLE(SPBBUNDL) GROUP(TAGGRP)                                                    
DFHFC0961 07/08/2020 15:40:30 CT56B4A1 Calculation of LSR pool 1 parameters incomplete. Filename DFHDBFK has no DSNAME.            
DFHPG0101 07/08/2020 15:40:34 CT56B4A1  CICSUSER CJSP Resource definition for WRTTSQ has been added.                               
DFHSJ1204 07/08/2020 15:40:34 CT56B4A1 A linkable service has been registered for program WRTTSQ in JVMSERVER DFHWLP with classname
           com.ibm.cicsdev.springboot.jcics.WriteTSQLinked, method writeTSQlinked.                                                 
DFHSJ1107 07/08/2020 15:40:34 CT56B4A1 WAR bundle with symbolic name cics-java-liberty-springboot-jcics-0.1.0 version 1.0.0 has bee
           Enabled.                                                                                                                
DFHRL0132 I 07/08/2020 15:40:34 CT56B4A1 CJSL All defined resources for BUNDLE SPBBUNDL are now in the enabled state.              
DFHAP1900 07/08/2020 15:40:40 CT56B4A1 NONE CICSUSER CONL SET BUNDLE(SPBBUNDL) ENABLESTATUS(ENABLED) RESP(NORMAL) RESP2(0).        

App-Funktionsprüfung

Lassen Sie uns einfach "CECI LINK PROGRAM (WRTTSQ)" vom CICS-Terminal aus ausgeben. image.png

Lassen Sie uns den Inhalt von TSQ "SPG JCICS" mit CEBR überprüfen. image.png

Die erwartete Nachricht ist geschrieben! Jetzt können Sie den Ablauf des Aufrufs der Spring Boot-App mit EXEC CICS LINK sehen!

Recommended Posts

CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Spring Boot 2.3 Verfügbarkeit von Anwendungen
[Spring Boot] Erstellung von Webanwendungen
[Java] Thymeleaf Basic (Spring Boot)
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Frühling Java
Spring Boot-Anwendungsentwicklung in Eclipse
Überprüfungspunkte für den Spring Boot-Anwendungscode
Elastische Bohnenstange (Java) + Spring Boot + https
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementieren Sie die Spring Boot-Anwendung in Gradle
[Java] LINE-Integration mit Spring Boot
[Java] [Spring] Spring Boot Das mysteriöse Hamarineta der Abhängigkeitsinjektion
Java 9+ Anwendungsstatus
Fordern Sie Spring Boot heraus
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
[Java] Spring DI ③
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Java-Anfänger haben versucht, mit Spring Boot eine einfache Webanwendung zu erstellen
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
CICS-Java-Anwendung ausführen- (1) Führen Sie eine einfache Beispielanwendung aus
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit
Konstruktionsverfahren für LINE Bot x Java (Spring Boot)
SPRING BOOT Lernaufzeichnung 01
Frühlingsstiefel + Heroku Postgres
Schreiben von Frühlingsstiefel-Memos (1)
Erster Frühlingsstiefel (DI)
SPRING BOOT Lernprotokoll 02
Spring Boot2 Spickzettel
Spring Boot-Ausnahmebehandlung
Spring Boot Entwicklung-Entwicklungsumgebung-
Spring Boot-Lernverfahren
Spring Boot lernen [Anfang]
Schreiben von Spring Boot-Memos (2)
Spring Boot 2.2 Dokumentzusammenfassung
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Spring Boot Tutorials Themen
Mit Spring Boot herunterladen
In die Spring Boot-Anwendung integrierte Integration von Tomcat, Apache und WebSocket
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Inhaltstyp: application / json hat seit Spring Boot 2.2 keinen Zeichensatz = UTF-8
Java (WebSphere Application Server) Hinweis [1]
[Spring Boot] Umgebungskonstruktion (macOS)
[Java / Kotlin] Escape-Verarbeitung (Bereinigung) für HTML5 mit Unbescape [Spring Boot]