Spring Boot Interview Spørgsmål

1. Introduktion

Siden introduktionen har Spring Boot været en nøgleaktør i Spring-økosystemet. Dette projekt gør vores liv meget lettere med dets automatiske konfigurationsevne.

I denne vejledning dækker vi nogle af de mest almindelige spørgsmål relateret til Spring Boot, der kan komme op under et jobinterview.

2. Spørgsmål

Q1. Hvad er Spring Boot, og hvad er dens vigtigste funktioner?

Spring Boot er i det væsentlige en ramme for hurtig applikationsudvikling bygget oven på Spring Framework. Med sin automatiske konfiguration og integrerede applikationsserversupport kombineret med den omfattende dokumentation og community-support, den nyder, er Spring Boot en af ​​de mest populære teknologier i Java-økosystemet fra dato.

Her er et par fremtrædende funktioner:

  • Startere - et sæt afhængighedsbeskrivere, der inkluderer relevante afhængigheder undervejs
  • Autokonfiguration - en måde til automatisk at konfigurere et program baseret på de afhængigheder, der findes på klassestien
  • Aktuator - for at få produktionsklare funktioner såsom overvågning
  • Sikkerhed
  • Logning

Q2. Hvad er forskellen mellem fjeder og fjederstøvle?

Spring Framework giver flere funktioner, der gør udviklingen af ​​webapplikationer nemmere. Disse funktioner inkluderer afhængighedsindsprøjtning, databinding, aspektorienteret programmering, dataadgang og mange flere.

I årenes løb har Spring været mere og mere kompleks, og mængden af ​​konfiguration, som en sådan applikation kræver, kan være skræmmende. Det er her Spring Boot er praktisk - det gør det let at konfigurere en Spring-applikation.

I det væsentlige, mens foråret er uopfattet, Spring Boot har en meningsfuld opfattelse af platformen og bibliotekerne, så vi hurtigt kan komme i gang.

Her er to af de vigtigste fordele, som Spring Boot medfører:

  • Konfigurer applikationer automatisk ud fra de artefakter, den finder på klassestien
  • Giv ikke-funktionelle funktioner, der er fælles for applikationer i produktionen, såsom sikkerhed eller sundhedskontrol

Se en af ​​vores andre tutorials for en detaljeret sammenligning mellem vaniljefjeder og forårstøvle.

Q3. Hvordan kan vi oprette en Spring Boot-applikation med Maven?

Vi kan inkludere Spring Boot i et Maven-projekt, ligesom vi ville have ethvert andet bibliotek. Den bedste måde er dog at arve fra spring-boot-starter-parent projekter og erklær afhængigheder til Spring Boot-startere. Hvis du gør dette, kan vores projekt genbruge standardindstillingerne for Spring Boot.

Arv af spring-boot-starter-parent projektet er ligetil - vi behøver kun at angive et forælder element i pom.xml:

 org.springframework.boot spring-boot-starter-parent 2.3.0.RELEASE 

Vi kan finde den nyeste version af spring-boot-starter-parent på Maven Central.

Brug af startforældreprojektet er praktisk, men ikke altid gennemførligt. For eksempel, hvis vores virksomhed kræver, at alle projekter arver fra en standard POM, kan vi stadig drage fordel af Spring Boot's afhængighedsstyring ved hjælp af en brugerdefineret forælder.

Q4. Hvad er Spring Initializr?

Spring Initializr er en bekvem måde at oprette et Spring Boot-projekt på.

Vi kan gå til Spring Initializr-webstedet, vælge et afhængighedsstyringsværktøj (enten Maven eller Gradle), et sprog (Java, Kotlin eller Groovy), et emballeringsskema (Jar eller War), version og afhængigheder og downloade projektet.

Det her skaber et skeletprojekt for os og sparer opsætningstid, så vi kan koncentrere os om at tilføje forretningslogik.

Selv når vi bruger vores IDE'er (som STS eller Eclipse med STS-plugin) nye projektguide til at oprette et Spring Boot-projekt, bruger det Spring Initializr under emhætten.

Q5. Hvilke startstarter til foråret er tilgængelige derude?

Hver starter spiller en rolle som en one-stop-shop for alle de forårsteknologier, vi har brug for. Andre krævede afhængigheder trækkes derefter ind og administreres på en ensartet måde.

Alle startere er under org.springframework.boot gruppe og deres navne starter med spring-boot-starter-. Dette navngivningsmønster gør det nemt at finde startere, især når man arbejder med IDE'er, der understøtter søgning af afhængigheder efter navn.

På tidspunktet for denne skrivning er der mere end 50 startere til vores rådighed. De mest anvendte er:

  • spring-boot-starter: core starter, inklusive support til automatisk konfiguration, logning og YAML
  • spring-boot-starter-aop: starter til aspektorienteret programmering med Spring AOP og AspectJ
  • spring-boot-starter-data-jpa: starter til brug af Spring Data JPA med Hibernate
  • spring-boot-starter-sikkerhed: starter til brug af Spring Security
  • spring-boot-starter-test: starter til test af Spring Boot-applikationer
  • spring-boot-starter-web: starter til opbygning af web, inklusive RESTful, applikationer, der bruger Spring MVC

For en komplet liste over startere, se dette lager.

For at finde flere oplysninger om Spring Boot startere, se nærmere på Introduktion til Spring Boot Starters.

Q6. Sådan deaktiveres en bestemt autokonfiguration?

Hvis vi vil deaktivere en bestemt automatisk konfiguration, kan vi angive det ved hjælp af udelukke attribut for @EnableAutoConfiguration kommentar. For eksempel neutraliserer dette kodestykke DataSourceAutoConfiguration:

// andre bemærkninger @EnableAutoConfiguration (ekskluder = DataSourceAutoConfiguration.class) offentlig klasse MyConfiguration {}

Hvis vi aktiverede automatisk konfiguration med @SpringBootApplication kommentar - som har @EnableAutoConfiguration som en metanotering - vi kunne deaktivere automatisk konfiguration med en attribut med samme navn:

// andre kommentarer @SpringBootApplication (ekskluder = DataSourceAutoConfiguration.class) offentlig klasse MyConfiguration {}

Vi kan også deaktivere en automatisk konfiguration med spring.autoconfigure.exclude miljøejendom. Denne indstilling i application.properties fil gør det samme som før:

spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Q7. Sådan registreres en brugerdefineret automatisk konfiguration?

For at registrere en automatisk konfigurationsklasse skal vi have dens fuldt kvalificerede navn angivet under EnableAutoConfiguration indtast META-INF / fjederfabrikker fil:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = com.baeldung.autoconfigure.CustomAutoConfiguration

Hvis vi bygger et projekt med Maven, skal filen placeres i ressourcer / META-INF bibliotek, som ender på det nævnte sted under pakke fase.

Q8. Hvordan kan man fortælle en automatisk konfiguration at komme væk, når en bønne eksisterer?

For at instruere en klasse til automatisk konfiguration at bakke ud, når der allerede findes en bønne, kan vi bruge @ConditionalOnMissingBean kommentar. De mest bemærkelsesværdige egenskaber ved denne kommentar er:

  • værdi: De typer bønner, der skal kontrolleres
  • navn: Navnene på bønner, der skal kontrolleres

Når den placeres på en metode prydet med @Bønne, er måltypen som standard metodens returtype:

@Configuration public class CustomConfiguration {@Bean @ConditionalOnMissingBean public CustomService service () {...}}

Q9. Hvordan distribueres Spring Boot-webapplikationer som Jar og War Files?

Traditionelt pakker vi en webapplikation som en WAR-fil og distribuerer den derefter til en ekstern server. Dette gør det muligt for os at arrangere flere applikationer på den samme server. I løbet af den tid, hvor CPU og hukommelse var knappe, var dette en fantastisk måde at spare ressourcer på.

Ting har dog ændret sig. Computerhardware er ret billig nu, og opmærksomheden er rettet mod serverkonfiguration. En lille fejl ved konfiguration af serveren under implementering kan føre til katastrofale konsekvenser.

Spring tackler dette problem ved at levere et plugin, nemlig spring-boot-maven-plugin, at pakke en webapplikation som en eksekverbar JAR. For at inkludere dette plugin skal du blot tilføje et plugin element til pom.xml:

 org.springframework.boot spring-boot-maven-plugin 

Med dette plugin på plads får vi en fed JAR efter udførelse af pakke fase. Denne JAR indeholder alle de nødvendige afhængigheder, inklusive en integreret server. Således behøver vi ikke længere bekymre os om at konfigurere en ekstern server.

Vi kan derefter køre applikationen ligesom vi ville have en almindelig eksekverbar JAR.

Bemærk, at emballage element i pom.xml filen skal indstilles til krukke at oprette en JAR-fil:

krukke

Hvis vi ikke inkluderer dette element, er det som standard også krukke.

Hvis vi vil oprette en WAR-fil, skal du ændre emballage element til krig:

krig

Og lad beholderafhængigheden være væk fra den pakkede fil:

 org.springframework.boot spring-boot-starter-tomcat leveres 

Efter at have henrettet Maven pakke fase, har vi en WAR-fil, der kan implementeres.

Q10. Hvordan bruges Spring Boot til kommandolinjeapplikationer?

Ligesom ethvert andet Java-program skal et Spring Boot-kommandolinjeprogram have et vigtigste metode. Denne metode tjener som et indgangspunkt, der påberåber sig SpringApplication # run metode til bootstrap applikationen:

@SpringBootApplication offentlig klasse MyApplication {public static void main (String [] args) {SpringApplication.run (MyApplication.class); // andre udsagn}}

Det SpringApplication klasse fyrer derefter en Spring container op og konfigurerer automatisk bønner.

Bemærk, at vi skal videregive en konfigurationsklasse til løb metode til at fungere som den primære konfigurationskilde. Efter konvention er dette argument selve indgangsklassen.

Efter at have ringet til løb metode, kan vi udføre andre udsagn som i et almindeligt program.

Q11. Hvad er mulige kilder til ekstern konfiguration?

Spring Boot yder support til ekstern konfiguration, så vi kan køre den samme applikation i forskellige miljøer. Vi kan bruge egenskabsfiler, YAML-filer, miljøvariabler, systemegenskaber og kommandolinjevalgargumenter til at specificere konfigurationsegenskaber.

Vi kan derefter få adgang til disse egenskaber ved hjælp af @Værdi kommentar, et bundet objekt via @ConfigurationProperties kommentar eller Miljø abstraktion.

Q12. Hvad betyder det, at Spring Boot understøtter afslappet binding?

Afslappet binding i Spring Boot gælder for den typesikre binding af konfigurationsegenskaber.

Med afslappet binding, nøglen til en ejendom behøver ikke at være et nøjagtigt match af et ejendomsnavn. En sådan miljøegenskab kan skrives i camelCase, kebab-case, snake_case eller med store bogstaver med ord adskilt med understregninger.

For eksempel, hvis en ejendom i en bønneklasse med @ConfigurationProperties kommentar er navngivet myProp, kan det være bundet til nogen af ​​disse miljøegenskaber: myProp, min-prop, my_prop, eller MY_PROP.

Q13. Hvad er Spring Boot Devtools brugt til?

Spring Boot Developer Tools eller DevTools er et sæt værktøjer, der gør udviklingsprocessen lettere. For at inkludere disse udviklingstidsfunktioner er vi bare nødt til at tilføje en afhængighed af pom.xml fil:

 org.springframework.boot spring-boot-devtools 

Det spring-boot-devtools modulet deaktiveres automatisk, hvis applikationen kører i produktion. Ompakning af arkiver udelukker også dette modul som standard. Derfor bringer det ikke noget overhead til vores slutprodukt.

Som standard anvender DevTools egenskaber, der er egnede til et udviklingsmiljø. Disse egenskaber deaktiverer caching af skabeloner, aktiverer fejllogning for webgruppen osv. Som et resultat har vi denne fornuftige udviklingstid konfiguration uden at indstille nogen egenskaber.

Programmer, der bruger DevTools, genstarter, når en fil på klassestien ændres. Dette er en meget nyttig funktion i udviklingen, da det giver hurtig feedback til ændringer.

Som standard modregner statiske ressourcer, inklusive visningsskabeloner, ikke en genstart. I stedet udløser en ressourceændring en browseropdatering. Bemærk, dette kan kun ske, hvis LiveReload-udvidelsen er installeret i browseren for at interagere med den integrerede LiveReload-server, som DevTools indeholder.

For yderligere information om dette emne, se Oversigt over Spring Boot DevTools.

Q14. Hvordan man skriver integrationstests?

Når vi kører integrationstest til en Spring-applikation, skal vi have en ApplicationContext.

For at gøre vores liv lettere giver Spring Boot en særlig kommentar til test - @SpringBootTest. Denne kommentar skaber en ApplicationContext fra konfigurationsklasser angivet med dens klasser attribut.

I tilfælde af at klasser attribut ikke er indstillet, Spring Boot søger efter den primære konfigurationsklasse. Søgningen starter fra pakken, der indeholder testen, indtil den finder en klasse, der er kommenteret med @SpringBootApplication eller @SpringBootConfiguration.

For detaljerede instruktioner, se vores vejledning om test i Spring Boot.

Q15. Hvad bruges fjederstartsaktuator til?

I det væsentlige bringer Actuator Spring Boot-applikationer til liv ved at aktivere produktionsklare funktioner. Disse funktioner giver os mulighed for at overvåge og administrere applikationer, når de kører i produktion.

Det er meget simpelt at integrere Spring Boot Actuator i et projekt. Alt, hvad vi skal gøre er at inkludere fjeder-boot-starter-aktuator starter i pom.xml fil:

 org.springframework.boot spring-boot-starter-actuator 

Spring Boot Actuator kan eksponere operationelle oplysninger ved hjælp af enten HTTP- eller JMX-slutpunkter. De fleste applikationer går dog til HTTP, hvor identiteten af ​​et slutpunkt og / aktuator præfiks danner en URL-sti.

Her er nogle af de mest almindelige indbyggede slutpunkter Aktuator giver:

  • env: Udsætter miljøegenskaber
  • sundhed: Viser sundhedsoplysninger om applikation
  • http spor: Viser HTTP-sporingsinformation
  • info: Viser vilkårlige applikationsoplysninger
  • metrics: Viser oplysninger om metrics
  • loggere: Viser og ændrer konfigurationen af ​​loggere i applikationen
  • kortlægninger: Viser en liste over alle @RequestMapping stier

Se vores vejledning til Spring Boot Actuator for en detaljeret gennemgang.

Q16. Hvilken er en bedre måde at konfigurere et Spring Boot-projekt på - ved hjælp af egenskaber eller YAML?

YAML tilbyder mange fordele i forhold til egenskabsfiler, såsom:

  • Mere klarhed og bedre læsbarhed
  • Perfekt til hierarkiske konfigurationsdata, som også er repræsenteret i et bedre og mere læsbart format
  • Understøttelse af kort, lister og skalartyper
  • Kan inkludere flere profiler i den samme fil

Men at skrive det kan være lidt vanskeligt og fejlbehæftet på grund af dets indrykningsregler.

For detaljer og arbejdseksempler henvises til vores Spring YAML vs Properties tutorial.

Q17. Hvad er de grundlæggende kommentarer, som Spring Boot tilbyder?

De primære kommentarer, som Spring Boot tilbyder, ligger i dens org.springframework.boot.autoconfigure og dets underpakker. Her er et par grundlæggende:

  • @EnableAutoConfiguration - for at få Spring Boot til at kigge efter autokonfigurationsbønner på klassestien og automatisk anvende dem.
  • @SpringBootApplication - bruges til at betegne hovedklassen i en Boot Application. Denne kommentar kombinerer @Konfiguration, @EnableAutoConfigurationog @ComponentScan annoteringer med deres standardattributter.

Spring Boot Annotations giver mere indsigt i emnet.

Q18. Hvordan kan du ændre standardporten i Spring Boot?

Vi kan ændre standardporten på en server indlejret i Spring Boot på en af ​​disse måder:

  • ved hjælp af en egenskabsfil - vi kan definere dette i en application.properties (eller ansøgning.yml) fil ved hjælp af ejendommen server.port
  • programmatisk - i det væsentlige @SpringBootApplication klasse, kan vi indstille server.port på den SpringApplication eksempel
  • ved hjælp af kommandolinjen - når vi kører applikationen som en jar-fil, kan vi indstille serveren. port som et Java-kommandoargument:
    java -jar -Dserver.port = 8081 myspringproject.jar 

Q19. Hvilke integrerede servere understøtter Spring Boot, og hvordan ændres standard?

Fra dato, Spring MVC understøtter Tomcat, Jetty og Undertow. Tomcat er standard applikationsserver understøttet af Spring Boot's web forret.

Spring WebFlux understøtter Reactor Netty, Tomcat, Jetty og Undertow med Reactor Netty som standard.

I Spring MVC, for at ændre standard, lad os sige til Jetty, er vi nødt til at ekskludere Tomcat og inkludere Jetty i afhængighederne:

 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty 

På samme måde skal vi for at ændre standard i WebFlux til UnderTow udelukke Reactor Netty og inkludere UnderTow i afhængighederne.

“Sammenligning af integreret servlet indeholder i Spring Boot” indeholder flere detaljer om de forskellige integrerede servere, vi kan bruge med Spring MVC.

Q20. Hvorfor har vi brug for forårsprofiler?

Når vi udvikler applikationer til virksomheden, beskæftiger vi os typisk med flere miljøer som Dev, QA og Prod. Konfigurationsegenskaberne for disse miljøer er forskellige.

For eksempel bruger vi muligvis en indlejret H2-database til Dev, men Prod kan have den proprietære Oracle eller DB2. Selvom DBMS er den samme på tværs af miljøer, ville URL'erne bestemt være forskellige.

For at gøre dette let og rent, Spring har tilvejebringelse af profiler, der hjælper med at adskille konfigurationen for hvert miljø. Så i stedet for at opretholde dette programmatisk, kan egenskaberne opbevares i separate filer som f.eks application-dev. ejendomme og application-prod. ejendomme . Standardindstillingen application.properties peger på den aktuelt aktive profil ved hjælp af forår. profiler. aktiv så den korrekte konfiguration hentes.

Spring Profiles giver et omfattende overblik over dette emne.

3. Konklusion

Denne tutorial gennemgik nogle af de mest kritiske spørgsmål om Spring Boot, som du måske står over for under et teknisk interview. Vi håber, de hjælper dig med at lande dit drømmejob.


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