Introduktion til Bootique

1. Oversigt

Bootique er en meget let open source containerfri JVM-rammen havde til formål at opbygge næste generations skalerbare mikrotjenester. Den er bygget oven på den integrerede Jetty-server og understøtter fuldt ud HVILE håndterere med jax-rs.

I denne artikel viser vi, hvordan man bygger en simpel webapplikation ved hjælp af Bootique.

2. Maven-afhængigheder

Lad os begynde at bruge Bootique ved at tilføje følgende afhængighed i pom.xml:

 io.bootique.jersey bootique-jersey kompilere io.bootique bootique-test test 

Imidlertid, Bootique kræver også at erklære nogle få BOM ("Stykliste") import. Derfor følger vi sektionen skal tilføjes i pom.xml:

   io.bootique.bom bootique-bom 0.23 pom import 

Den seneste version af Bootique er tilgængelig i Central Maven Repository.

At bygge en krukke, der kan løbe, Bootique er afhængig af maven-shade-plugin. Derfor skal vi også tilføje nedenstående konfiguration:

   org.apache.maven.plugins maven-skygge-plugin 

3. Start af en applikation

Den enkleste måde at starte en Bootique ansøgning er at påberåbe sig Bootique'S udføre () metode fra hovedmetoden:

public class App {public static void main (String [] args) {Bootique.app (args) .autoLoadModules () .exec (); }}

Dette starter dog ikke den integrerede server. Når ovenstående kode er kørt, skal følgende log vises:

NAVN com.baeldung.bootique.App VALGMULIGHEDER -c yaml_location, --config = yaml_location Angiver YAML-konfigurationsplacering, som kan være en filsti eller en URL. -h, --help Udskriver denne meddelelse. -H, --help-config Udskriver oplysninger om applikationsmoduler og deres konfigurationsmuligheder. -s, --server Starter Jetty-serveren.

Disse er intet andet end de tilgængelige programargumenter, der leveres forudpakket med Bootique.

Navnene er selvforklarende; Derfor skal vi enten passere for at starte serveren –S eller –Server argument, og serveren kører på standardport 8080.

4. Moduler

Bootique ansøgninger foretages med samlinger af “moduler”. I Bootique'S term “Et modul er et Java-bibliotek, der indeholder noget kode” hvilket betyder, at det behandler enhver service som et modul. Det bruger Google Guice til afhængighedsinjektion.

Lad os oprette en grænseflade for at se, hvordan det fungerer:

offentlig grænseflade HelloService {boolean save (); }

Nu skal vi oprette en implementering:

offentlig klasse HelloServiceImpl implementerer HelloService {@Override public boolean save () {return true; }}

Der er to måder, hvorpå vi kan indlæse modulet. Den første er at bruge Guice'S Modul interface, og den anden er ved hjælp af Bootique'S BQModuleProvider som også er kendt som automatisk indlæsning.

4.1. Guice-modul

Her kan vi bruge Guice'S Modul interface til at binde forekomster:

offentlig klasse ModuleBinder implementerer modul {@Override public void configure (Binder binder) {binder .bind (HelloService.class) .to (HelloServiceImpl.class); }}

Når modulet er defineret, skal vi kortlægge dette brugerdefinerede modul til Bootique eksempel:

Bootique .app (args) .module (module) .module (ModuleBinder.class) .autoLoadModules () .exec ();

4.2. BQModuleProvider (automatisk indlæsning)

Her er alt, hvad vi skal gøre, at definere det tidligere oprettede modul-bindemiddel med BQModuleProvider:

offentlig klasse ModuleProvider implementerer BQModuleProvider {@Override public Module module () {return new ModuleBinder (); }}

Fordelen ved denne teknik er, at vi ikke behøver at kortlægge moduloplysninger med Bootique eksempel.

Vi skal bare oprette en fil i /resources/META-INF/services/io.bootique.BQModuleProvider og skriv det fulde navn på ModuleProvider inklusive pakkenavn og Bootique tager sig af resten:

com.baeldung.bootique.module.ModuleProvider

Nu kan vi bruge @Indsprøjte kommentar til at bruge serviceinstanserne ved kørselstiden:

@Injicer HelloService helloService;

En vigtig ting at bemærke her er, at da vi bruger Bootique'S egen DI-mekanisme, vi behøver ikke bruge Guice @ImplementedBy kommentar til binding af serviceinstanserne.

5. REST slutpunkt

Det er ligetil at oprette REST-slutpunkter ved hjælp af JAX-RS API:

@Path ("/") offentlig klasse IndexController {@GET public String index () {return "Hej, baeldung!"; } @ POST offentlig Streng gem () {return "Data gemt!"; }}

For at kortlægge slutpunkterne i Bootique'S egen Jersey For eksempel skal vi definere en JerseyModule:

Modulmodul = bindemiddel -> JerseyModule .extend (bindemiddel) .addResource (IndexController.class);

6. Konfiguration

Vi kan levere indbyggede eller brugerdefinerede konfigurationsoplysninger i en YAML-baseret ejendomsfil.

For eksempel, hvis vi vil starte applikationen på en brugerdefineret port og tilføje en standard URI-kontekst 'hej', kan vi bruge følgende YAML-konfiguration:

anløbsbro: kontekst: / hej stik: port: 10001

Nu, mens vi starter applikationen, skal vi angive denne fils placering i konfigurationsparameteren:

--config = / home / baeldung / bootique / config.yml

7. Logning

Ud af boksen Bootique kommer med en bootique-logback modul. For at bruge dette modul skal vi tilføje følgende afhængighed i pom.xml:

 io.bootique.logback bootique-logback 

Dette modul leveres med en BootLogger interface med vi kan tilsidesætte for at implementere brugerdefineret logning:

Bootique.app (args) .module (module) .module (ModuleBinder.class) .bootLogger (new BootLogger () {@Override public void trace (Supplier args) {// ...} @Override public void stdout (String args ) {// ...} @ Override public void stderr (String args, Throwable thw) {// ...} @ Override public void stderr (String args) {// ...}}). AutoLoadModules (). exec ();

Vi kan også definere logningskonfigurationsoplysninger i config.yaml fil:

log: niveau: advare appenders: - type: fil logFormat: '% c {20}:% m% n' fil: /sti / til / logging / dir / logger.log

8. Testning

Til testning Bootique følger med bootique-test modul. Der er to måder, hvorpå vi kan teste a Bootique Ansøgning.

Den første tilgang er 'Forgrund' tilgang, der får alle test-sager til at køre på hovedtesttråden.

Den anden er 'baggrund' tilgang, der får testkasserne til at køre på en isoleret trådpulje.

'Forgrundsmiljøet kan initialiseres ved hjælp af BQTestFactory:

@Rule public BQTestFactory bqTestFactory = ny BQTestFactory ();

'Baggrundsmiljøet kan initialiseres ved hjælp af BQDaemonTestFactory:

@ Regel offentlig BQDaemonTestFactory bqDaemonTestFactory = ny BQDaemonTestFactory ();

Når miljøfabrikken er klar, kan vi skrive enkle testcases for at teste tjenesterne:

@Test offentlig ugyldighed givenService_expectBoolen () {BQRuntime runtime = bqTestFactory .app ("- server"). AutoLoadModules () .createRuntime (); HelloService service = runtime.getInstance (HelloService.class); assertEquals (true, service.save ()); }

9. Konklusion

I denne artikel viste vi, hvordan man bygger en applikation ved hjælp af Bootique'S kernemoduler. Der er flere andre Bootique moduler tilgængelige som bootique-jooq, bootique-kotlin, bootique-jobosv. Den fulde liste over tilgængelige moduler er tilgængelig her.

Som altid er den fulde kildekode tilgængelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found