Hvad er nyt i Spring Boot 2?

1. Oversigt

Spring Boot bringer en meningsfuld tilgang til Spring økosystemet. Udgivet først i midten af ​​2014. Spring Boot har været igennem en masse udvikling og forbedring. Dens version 2.0 gør sig i dag klar til frigivelse i begyndelsen af ​​2018.

Der er forskellige områder, hvor dette populære bibliotek forsøger at hjælpe os:

  • Afhængighedsstyring. Gennem startere og forskellige integrationer af pakkehåndtering
  • Autokonfiguration. Forsøg på at minimere den konfigurationsmængde, som en Spring-app kræver, er klar til at gå og favoriserer konvention frem for konfiguration
  • Produktionsklare funktioner. Såsom Aktuator, bedre logning, overvågning, metrics eller forskellige PAAS-integrationer
  • Forbedret udviklingserfaring. Med flere testværktøjer eller en bedre feedback-loop ved hjælp af spring-boot-devtools

I denne artikel undersøger vi nogle ændringer og funktioner, der er planlagt til Spring Boot 2.0. Vi beskriver også, hvordan disse ændringer kan hjælpe os med at blive mere produktive.

2. Afhængigheder

2.1. Java-baseline

Spring Boot 2.x understøtter ikke længere Java 7 og derunder, idet Java 8 er minimumskravet.

Det er også den første version, der understøtter Java 9. Der er ingen planer om at understøtte Java 9 på 1.x-grenen. Det betyder Hvis du vil bruge den nyeste Java-udgivelse og drage fordel af denne ramme, er Spring Boot 2.x din eneste mulighed.

2.2. Stykliste

Med hver nye udgivelse af Spring Boot opgraderes versioner af forskellige afhængigheder af Java-økosystemet. Dette er defineret i Boot stykliste aka BOM.

I 2.x er dette ingen undtagelse. Det giver ingen mening at liste dem, men vi kan se på det spring-boot-dependencies.pom for at se, hvilke versioner der bruges på et givet tidspunkt.

Et par højdepunkter vedrørende minimum krævede versioner:

  • Tomcat minimum understøttet version er 8.5
  • Dvaletilstand som minimum understøttet version er 5.2
  • Gradle minimum understøttet version er 3.4

2.3. Gradle-plugin

Gradle-pluginet har været igennem store forbedringer og nogle brudende ændringer.

For at skabe fede krukker, bootRepackage Gradles opgave bliver erstattet med bootJar og bootWar at bygge henholdsvis krukker og krige.

Hvis vi ønskede at køre vores apps med Gradle-pluginet i 1.x, kunne vi udføre gradle bootKør.I 2.x bootRun udvider Gradles JavaExec. Dette betyder, at det er lettere for os at konfigurere det ved at anvende den samme konfiguration, som vi typisk bruger i klassisk JavaExec opgaver.

Nogle gange finder vi os selv ønsker at drage fordel af Spring Boot BOM. Men nogle gange vil vi ikke oprette en fuld Boot-app eller ompakke den.

I denne henseende er det interessant at vide det Spring Boot 2.x anvender ikke længere plugin for afhængighedsstyring som standard.

Hvis vi vil have Spring Boot-afhængighedsstyring, skal vi tilføje:

anvend plugin: 'io.spring.dependency-management'

Dette giver os større fleksibilitet med mindre konfiguration i ovennævnte scenarie.

3. Autokonfiguration

3.1. Sikkerhed

I 2.x bliver sikkerhedskonfigurationen dramatisk forenklet. Som standard er alt sikret, inklusive statiske ressourcer og aktuatorendepunkter.

Når brugeren først har konfigureret sikkerheden, stopper Spring Boot-standardindstillingerne med at påvirke. Brugeren kan derefter konfigurere alle adgangsregler et sted.

Dette forhindrer os i at kæmpe med WebSecurityConfigurerAdapter bestillingsproblemer. Disse problemer plejede at ske normalt, når du konfigurerer sikkerhedsregler for aktuator og app på en brugerdefineret måde.

Lad os se på et simpelt sikkerhedsuddrag, der blander aktuator- og applikationsregler:

http.authorizeRequests () .requestMatchers (EndpointRequest.to ("health")) .permitAll () // Actuator rules per endpoint .requestMatchers (EndpointRequest.toAnyEndpoint ()). hasRole ("admin") // Actuator general rules .requestMatchers (PathRequest.toStaticResources (). AtCommonLocations ()) .permitAll () // Statisk ressource sikkerhed .antMatchers ("/ **"). HasRole ("bruger") // Regler for applikationssikkerhed // ...

3.2. Reaktiv support

Spring Boot 2 bringer et sæt nye startere til forskellige reaktive moduler. Nogle eksempler er WebFlux og de reaktive modstykker til MongoDB, Cassandra eller Redis.

Der er også testværktøjer til WebFlux. Især kan vi drage fordel af @WebFluxTest. Dette opfører sig på samme måde som de ældre @WebMvcTest oprindeligt introduceret som en del af de forskellige test skiver tilbage i 1.4.0.

4. Produktionsklare funktioner

Spring Boot bringer nogle nyttige værktøjer, der gør det muligt for os at oprette produktionsklare applikationer. Blandt andet kan vi drage fordel af Spring Boot Actuator.

Aktuator indeholder forskellige værktøjer til forenkling af overvågning, sporing og generel app-introspektion. Yderligere detaljer om aktuator kan findes i vores tidligere artikel.

Med sin 2 version aktuator har været gennem store forbedringer. Denne iteration fokuserer på at forenkle tilpasning. Det understøtter også andre webteknologier, herunder det nye reaktive modul.

4.1. Teknologisk support

I Spring Boot 1.x blev kun Spring-MVC understøttet til aktuatorendepunkter. I 2.x blev det imidlertid uafhængigt og tilslutteligt. Spring boot bringer nu support ud af kassen til WebFlux, Jersey og Spring-MVC.

Som før forbliver JMX en mulighed og kan aktiveres eller deaktiveres gennem konfiguration.

4.2. Oprettelse af brugerdefinerede slutpunkter

Den nye aktuatorinfrastruktur er teknologi-agnostisk. På grund af dette er udviklingsmodellen blevet redesignet fra bunden.

Den nye model giver også større fleksibilitet og udtryksevne.

Lad os se, hvordan man opretter en Frugter slutpunkt for aktuator:

@Endpoint (id = "fruits") offentlig klasse FruitsEndpoint {@ReadOperation public Map fruits () {...} @WriteOperation public void addFruits (@Selector String name, Fruit fruit) {...}}

Når vi tilmelder os FrugtEndpoint i vores ApplicationContext, det kan eksponeres som et webendepunkt ved hjælp af vores valgte teknologi. Vi kan også udsætte det via JMX afhængigt af vores konfiguration.

Når vi oversætter vores slutpunkt til web-slutpunkter, vil dette resultere i:

  • / applikation / frugt returnerer frugt
  • STOLPE/ applikationer / frugter / {a-fruit} håndtering af den frugt, som skal inkluderes i nyttelasten

Der er mange flere muligheder. Vi kunne hente mere detaljerede data. Vi kunne også definere specifikke implementeringer pr. Underliggende teknologi (f.eks. JMX vs. web). Med henblik på artiklen holder vi det som en simpel introduktion uden at komme for meget i detaljer.

4.3. Sikkerhed i aktuator

I Spring Boot 1.x Actuator definerer sin egen sikkerhedsmodel. Denne sikkerhedsmodel er forskellig fra den, der bruges i vores applikation.

Dette var roden til mange smertepunkter, når brugerne forsøgte at forfine sikkerheden.

I 2.x skal sikkerhedskonfigurationen konfigureres ved hjælp af den samme konfiguration, som resten af ​​applikationen bruger.

Som standard er de fleste aktuatorendepunkter deaktiveret. Dette er uafhængigt af, om Spring Security er i klassestien eller ej. Ud over status og info, alle de andre slutpunkter skal aktiveres af brugeren.

4.4. Andre vigtige ændringer

  • De fleste konfigurationsegenskaber er nu under management.xxx f.eks.: management.endpoints.jmx
  • Nogle slutpunkter har et nyt format. f.eks.: env, flyvebane eller liquibase
  • Foruddefinerede slutpunktsstier kan ikke længere konfigureres

5. Forbedret udviklingserfaring

5.1. Bedre feedback

Forårstøvle introduceret devtools i 1.3.

Det tager sig af at udjævne typiske udviklingsproblemer. For eksempel caching af visningsteknologier. Det udfører også automatisk genstart og browser-genindlæsning. Det gør det også muligt for os at fjerne fejlfindingsapps.

I 2.x når vores ansøgning genstartes af devtools en 'delta' rapport udskrives. Denne rapport vil påpege, hvad der er ændret, og hvilken indvirkning det kan have på vores ansøgning.

Lad os sige, at vi definerer en JDBC-datakilde, der tilsidesætter den, der er konfigureret af Spring Boot.

Devtools angiver, at den autokonfigurerede ikke længere oprettes. Det vil også påpege årsagen, et negativt match i @ConditionalOnMissingBean for type javax.sql.DataSource. Devtools udskriver denne rapport, når den genstarter.

5.2. Breaking Changes

På grund af JDK 9-problemer dropper devtools support til fjernfejlfinding via HTTP.

6. Resume

I denne artikel dækkede vi nogle af de ændringer, som Spring Boot 2 vil medføre.

Vi diskuterede afhængigheder, og hvordan Java 8 bliver den mindst understøttede version.

Dernæst talte vi om autokonfiguration. Vi fokuserede blandt andet på sikkerhed. Vi talte også om aktuator og de mange forbedringer, den har modtaget.

Endelig talte vi om nogle mindre justeringer, der skete i de medfølgende udviklingsværktøjer.


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