[JAVA] Implementieren Sie die Spring Boot-Anwendung in Gradle

Schritte zum Erstellen und Ausführen von Spring Boot mit Gradle.

Verfahren

  1. Zu build.gradle hinzugefügt
  2. Erstellen Sie eine Klasse zum Ausführen von Spring Boot
  3. Erstellen Sie eine Klasse für die API
  4. Starten Sie Spring Boot mit Gradle
  5. Überprüfen Sie das Ausführungsergebnis der API

Zu build.gradle hinzugefügt

build.gradle


def applicationVersion = project.properties['release.version']

// ~~~

// Spring Boot
buildscript {
    def springBootVersion = '2.0.3.RELEASE'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:' + springBootVersion
    }
}

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

def springBootApplicationName = 'hello-world-spring-boot'
bootJar {
    baseName = springBootApplicationName
    version = applicationVersion
}

bootWar {
    baseName = springBootApplicationName
    version = applicationVersion
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-devtools'
    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

gesamte build.gradle

build.gradle


//Versionsgradle freigeben.Holen Sie sich von Eigenschaften und setzen
def applicationVersion = project.properties['release.version']
version = applicationVersion

//Java-Version
apply plugin: 'java'
def javaVersion = JavaVersion.VERSION_1_10
sourceCompatibility = javaVersion
targetCompatibility = javaVersion

//Kriegsdatei ausgeben
apply plugin: 'war'

//Abhängige Bibliotheksversion
def junitVersion = '5.2.0'
def jacocoVersion = '0.8.1'
def checkstyleVersion = '8.10.1'

//Abhängiges Ziel für den Erwerb der Bibliothek
repositories {
    //Verwenden Sie Maven Central
    mavenCentral()
}

//Abhängige Bibliotheken
dependencies {
    // JUnit
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: junitVersion
    testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-params', version: junitVersion
}

test {
    //Verwenden Sie JUnit 5, wenn Sie Gradle erstellen
    useJUnitPlatform()
    //Anzahl der parallelen Ausführungsthreads für den Test
    maxParallelForks = 4
}

//Gradle-Plug-In-Einstellungen, die verschiedene IDE-Einstellungsdateien ausgeben
apply plugin: 'eclipse'
apply plugin: 'idea'

//Verwenden Sie Jacoco für die Testabdeckung
apply plugin: 'jacoco'
jacoco {
    toolVersion = jacocoVersion
}

jacocoTestReport {
    reports {
        xml.enabled = true
        html.enabled = true
    }
}

build.dependsOn jacocoTestReport

//Statische Code-Analyse mit Checkstyle
apply plugin: 'checkstyle'
checkstyle {
    toolVersion = checkstyleVersion
    //Standardmäßig/src/main/Verweisen Sie unter Ressourcen auf die XML-Datei direkt unter dem Repository
    configFile = file('checkstyle.xml')
    //Brechen Sie den Build ab, wenn beim Ausführen von Checkstyle ein Fehler auftritt
    ignoreFailures = false
}

// Spring Boot
buildscript {
    def springBootVersion = '2.0.3.RELEASE'
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.springframework.boot:spring-boot-gradle-plugin:' + springBootVersion
    }
}

apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

def springBootApplicationName = 'hello-world-spring-boot'
bootJar {
    baseName = springBootApplicationName
    version = applicationVersion
}

bootWar {
    baseName = springBootApplicationName
    version = applicationVersion
}

dependencies {
    compile 'org.springframework.boot:spring-boot-starter-web'
    compile 'org.springframework.boot:spring-boot-devtools'
    testCompile 'org.springframework.boot:spring-boot-starter-test'
}

Erstellen Sie eine Klasse zum Ausführen von Spring Boot

Produktcode

Application.java


package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }

}

Testcode

ApplicationTest.java


package hello;

import org.junit.jupiter.api.Test;

class ApplicationTest {

  @Test
  void main() {
    Application.main(new String[0]);
  }

}

Ich erhalte eine Warnung, dass Spring Boot automatisch beendet wird, aber es gibt kein Problem. Bitte geben Sie an, ob es eine bessere Lösung gibt.

Erstellen Sie eine Klasse für die API

Produktcode

HelloWorldController.java


package hello;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
class HelloWorldController {

  static final String HELLO_WORLD = "Hello, world.";
  private static final int BUFFER_SIZE = 1024;

  @RequestMapping(value = "/string", method = RequestMethod.GET)
  String byString() {
    return HELLO_WORLD;
  }

  @RequestMapping(value = "/byte", method = RequestMethod.GET)
  byte[] byBytes() {
    return HELLO_WORLD.getBytes();
  }

  @RequestMapping(value = "/stream", method = RequestMethod.GET)
  ResponseEntity<InputStreamResource> byStream() {
    final InputStreamResource inputStreamResource = new InputStreamResource(
        new BufferedInputStream(new ByteArrayInputStream(HELLO_WORLD.getBytes()), BUFFER_SIZE)
    );

    final HttpHeaders headers = new HttpHeaders();
    headers.setContentLength(HELLO_WORLD.getBytes().length);

    return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
  }

}

Testcode

HelloControllerTest.java


package hello;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

class HelloControllerTest {

  @Test
  void byString() {
    final HelloWorldController helloController = new HelloWorldController();
    Assertions.assertAll(
        () -> Assertions.assertEquals(helloController.byString(), HelloWorldController.HELLO_WORLD)
    );
  }

  @Test
  void byBytes() {
    final HelloWorldController helloController = new HelloWorldController();
    Assertions.assertAll(
        () -> Assertions.assertEquals(Arrays.toString(helloController.byBytes()),
            Arrays.toString(HelloWorldController.HELLO_WORLD.getBytes()))
    );
  }

  @Test
  void byStream() {
    final HelloWorldController helloController = new HelloWorldController();
    final ResponseEntity<InputStreamResource> response = helloController.byStream();
    try (final InputStream input = response.getBody().getInputStream()) {
      final byte[] body = input.readAllBytes();
      Assertions.assertAll(
          () -> Assertions.assertEquals(response.getStatusCode(), HttpStatus.OK),
          () -> Assertions.assertEquals(Arrays.toString(body),
              Arrays.toString(HelloWorldController.HELLO_WORLD.getBytes()))
      );
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

}

Starten Sie Spring Boot mit Gradle

Befehlsausführung

gradle bootRun

Oder

gradlew bootRun

Überprüfen Sie das Ausführungsergebnis der API

In beiden Fällen wird Hello, world. Im Antworttext zurückgegeben (wird im Browser in Worten angezeigt).

Bonus

In der Antwort des Typs, der InputStream zurückgibt, habe ich überprüft, ob InputStream ordnungsgemäß geschlossen wurde.


  @RequestMapping(value = "/stream", method = RequestMethod.GET)
  ResponseEntity<InputStreamResource> byStream() {
    final InputStreamResource inputStreamResource = new InputStreamResource(
        new BufferedInputStreamCustom(new ByteArrayInputStream(HELLO_WORLD.getBytes()), BUFFER_SIZE)
    );

    final HttpHeaders headers = new HttpHeaders();
    headers.setContentLength(HELLO_WORLD.getBytes().length);

    return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
  }

  private static class BufferedInputStreamCustom extends BufferedInputStream {

    public BufferedInputStreamCustom(InputStream in, int size) {
      super(in, size);
    }

    @Override
    public void close() throws IOException {
      System.out.println("closed");
      super.close();
    }

  }

Jedes Mal, wenn ich die API ausführte, erhielt ich eine geschlossene Ausgabe auf der Konsole und stellte fest, dass der von mir übergebene InputStream ordnungsgemäß geschlossen wurde.

Recommended Posts

Implementieren Sie die Spring Boot-Anwendung in Gradle
Spring Boot 2 Multiprojekt mit Gradle
Spring Boot-Anwendungsentwicklung in Eclipse
Implementieren Sie die REST-API mit Spring Boot
Erstellen Sie mit Gradle ein Spring Boot + Docker-Image
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
Zeigen Sie die Gradle-Aufgabe im Spring Boot-Projekt an
Implementieren Sie die Anwendungsfunktion in Rails
Legen Sie den Kontextparameter in Spring Boot fest
Implementieren Sie GraphQL mit Spring Boot
[Spring Boot] Erstellung von Webanwendungen
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Überprüfungspunkte für den Spring Boot-Anwendungscode
◆ Konstruktionsnotiz für Spring Boot + Gradle-Umgebung
Schreiben Sie den Testcode mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementieren Sie reCAPTCHA v3 in Java / Spring
Beispiel einer Webanwendung, die mit Spring Boot 1.5 mehrere Datenbanken verwaltet
Was ist @Autowired im Spring Boot?
Verwendung von Thymeleaf mit Spring Boot
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Statische Dateizugriffspriorität beim Spring Boot
Spring Boot-Protokoll im JSON-Format ausgeben
Memorandum zum Herunterladen lokaler Dateien mit Spring Boot
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Lösen Sie die Thymeleaf-Syntaxprüfung in Spring Boot
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
[Trainieren! ] Zeigen Sie Hello World mit Spring Boot an
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Zusammenfassung der Grundeinstellungen für Spring Boot, Doma2, Gradle
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
DI SessionScope Bean im Spring Boot 2-Filter
(IntelliJ + gradle) Hallo Welt mit Spring Boot
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Ändern Sie das Sitzungszeitlimit in Spring Boot
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Fordern Sie Spring Boot heraus
Automatische Bereitstellung von in Java entwickelten Webanwendungen mit Jenkins [Spring Boot App Edition]
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Erstellen Sie eine Website mit Spring Boot + Gradle (jdk1.8.x)
SameSite-Cookie im Spring Boot (Spring Web MVC + Tomcat)
Konfigurieren Sie die Spring Boot-Anwendung mit dem Maven Multi-Modul
Führen Sie ein Spring Boot-Projekt mit VS-Code aus
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Ich wollte Spring Boot in einem Multiprojekt gradle
Stellen Sie die Spring Boot-Anwendung für Elastic Beanstalk bereit