Spring Boot Interview Vragen

1. Inleiding

Sinds de introductie is Spring Boot een belangrijke speler in het Spring-ecosysteem. Dit project maakt ons leven veel gemakkelijker met zijn automatische configuratiemogelijkheden.

In deze tutorial behandelen we enkele van de meest voorkomende vragen met betrekking tot Spring Boot die tijdens een sollicitatiegesprek naar voren kunnen komen.

2. Vragen

V1. Wat is Spring Boot en wat zijn de belangrijkste kenmerken?

Spring Boot is in wezen een raamwerk voor snelle applicatie-ontwikkeling gebouwd bovenop het Spring Framework. Met zijn automatische configuratie en ondersteuning voor embedded applicatieservers, gecombineerd met de uitgebreide documentatie en community-ondersteuning die het geniet, is Spring Boot op dit moment een van de meest populaire technologieën in het Java-ecosysteem.

Hier zijn een paar opvallende kenmerken:

  • Starters - een set afhankelijkheidsdescriptors om meteen relevante afhankelijkheden op te nemen
  • Auto-configuratie - een manier om automatisch een applicatie te configureren op basis van de afhankelijkheden die aanwezig zijn op het klassenpad
  • Actuator - voor productieklare functies zoals bewaking
  • Veiligheid
  • Logboekregistratie

Q2. Wat zijn de verschillen tussen lente- en springlaars?

Het Spring Framework biedt meerdere functies die de ontwikkeling van webapplicaties eenvoudiger maken. Deze functies omvatten afhankelijkheidsinjectie, gegevensbinding, aspectgeoriënteerd programmeren, gegevenstoegang en nog veel meer.

In de loop der jaren is Spring steeds complexer geworden en de hoeveelheid configuratie die een dergelijke applicatie vereist, kan intimiderend zijn. Dit is waar Spring Boot van pas komt - het maakt het configureren van een Spring-applicatie een fluitje van een cent.

In wezen, terwijl de lente niet geoordeeld is, Spring Boot neemt een eigenzinnig beeld van het platform en de bibliotheken, waardoor we snel aan de slag kunnen.

Hier zijn twee van de belangrijkste voordelen van Spring Boot:

  • Configureer applicaties automatisch op basis van de artefacten die het op het klassenpad vindt
  • Biedt niet-functionele kenmerken die gebruikelijk zijn voor toepassingen in productie, zoals beveiligings- of gezondheidscontroles

Bekijk een van onze andere tutorials voor een gedetailleerde vergelijking tussen vanilla Spring en Spring Boot.

Q3. Hoe kunnen we een Spring Boot-applicatie opzetten met Maven?

We kunnen Spring Boot opnemen in een Maven-project, net als elke andere bibliotheek. De beste manier is echter om te erven van de spring-boot-starter-parent project en declareer afhankelijkheden aan Spring Boot-starters. Hierdoor kan ons project de standaardinstellingen van Spring Boot hergebruiken.

Overnemen van het spring-boot-starter-parent project is eenvoudig - we hoeven alleen een ouder element in pom.xml:

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

We kunnen de laatste versie van spring-boot-starter-parent op Maven Central.

Het gebruik van het startende ouderproject is handig, maar niet altijd haalbaar. Als ons bedrijf bijvoorbeeld vereist dat alle projecten erven van een standaard POM, kunnen we nog steeds profiteren van het afhankelijkheidsbeheer van Spring Boot met behulp van een aangepaste ouder.

V4. Wat is Spring Initializr?

Spring Initializr is een handige manier om een ​​Spring Boot-project te maken.

We kunnen naar de Spring Initializr-site gaan, een hulpmiddel voor afhankelijkheidsbeheer kiezen (Maven of Gradle), een taal (Java, Kotlin of Groovy), een verpakkingsschema (Jar of War), versie en afhankelijkheden, en het project downloaden.

Dit maakt voor ons een skeletproject en bespaart insteltijd, zodat we ons kunnen concentreren op het toevoegen van bedrijfslogica.

Zelfs wanneer we onze IDE's (zoals STS of Eclipse met STS-plug-in) nieuwe projectwizard gebruiken om een ​​Spring Boot-project te maken, gebruikt het Spring Initializr onder de motorkap.

V5. Welke Spring Boot-starters zijn er verkrijgbaar?

Elke starter speelt een rol als one-stop-shop voor alle Spring-technologieën die we nodig hebben. Andere vereiste afhankelijkheden worden vervolgens tijdelijk opgenomen en op een consistente manier beheerd.

Alle voorgerechten staan ​​onder de org.springframework.boot groep en hun namen beginnen met spring-boot-starter-. Dit naamgevingspatroon maakt het gemakkelijk om starters te vinden, vooral wanneer u werkt met IDE's die het zoeken naar afhankelijkheden op naam ondersteunen.

Op het moment van schrijven staan ​​er meer dan 50 starters tot onze beschikking. De meest gebruikte zijn:

  • spring-boot-starter: core starter, inclusief ondersteuning voor automatische configuratie, logboekregistratie en YAML
  • spring-boot-starter-aop: starter voor aspectgeoriënteerd programmeren met Spring AOP en AspectJ
  • spring-boot-starter-data-jpa: starter voor het gebruik van Spring Data JPA met Hibernate
  • spring-boot-starter-security: starter voor het gebruik van Spring Security
  • spring-boot-starter-test: starter voor het testen van Spring Boot-applicaties
  • spring-boot-starter-web: starter voor het bouwen van webtoepassingen, inclusief RESTful, applicaties met behulp van Spring MVC

Zie deze repository voor een volledige lijst met starters.

Voor meer informatie over Spring Boot-starters, bekijk Intro to Spring Boot Starters.

V6. Hoe kan ik een specifieke autoconfiguratie uitschakelen?

Als we een specifieke autoconfiguratie willen uitschakelen, kunnen we dit aangeven met de uitsluiten attribuut van de @EnableAutoConfiguration annotatie. Dit codefragment neutraliseert bijvoorbeeld DataSourceAutoConfiguration:

// andere annotaties @EnableAutoConfiguration (exclude = DataSourceAutoConfiguration.class) openbare klasse MyConfiguration {}

Als we autoconfiguratie hebben ingeschakeld met de @SpringBootApplication annotatie - die heeft @EnableAutoConfiguration als meta-annotatie - we zouden autoconfiguratie kunnen uitschakelen met een attribuut met dezelfde naam:

// andere annotaties @SpringBootApplication (exclude = DataSourceAutoConfiguration.class) openbare klasse MyConfiguration {}

We kunnen ook een automatische configuratie uitschakelen met de spring.autoconfigure.exclude milieu eigendom. Deze instelling in de application.properties bestand doet hetzelfde als voorheen:

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

V7. Hoe registreer ik een aangepaste autoconfiguratie?

Om een ​​autoconfiguratieklasse te registreren, moet de volledig gekwalificeerde naam worden vermeld onder de EnableAutoConfiguration toets het META-INF / spring.factories het dossier:

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

Als we een project bouwen met Maven, moet dat bestand in de middelen / META-INF directory, die tijdens de pakket fase.

V8. Hoe vertel je een autoconfiguratie om terug te gaan als er een boon bestaat?

Om een ​​autoconfiguratieklasse te instrueren om zich terug te trekken wanneer er al een bean bestaat, kunnen we de @ConditionalOnMissingBean annotatie. De meest opvallende kenmerken van deze annotatie zijn:

  • waarde: De soorten bonen die moeten worden gecontroleerd
  • naam: De namen van de bonen die moeten worden gecontroleerd

Wanneer geplaatst op een methode versierd met @Boon, het doeltype is standaard ingesteld op het retourtype van de methode:

@Configuration openbare klasse CustomConfiguration {@Bean @ConditionalOnMissingBean openbare CustomService-service () {...}}

V9. Hoe Spring Boot-webapplicaties te implementeren als Jar- en War-bestanden?

Traditioneel verpakken we een webtoepassing als een WAR-bestand en implementeren deze vervolgens op een externe server. Hierdoor kunnen we meerdere applicaties op dezelfde server plaatsen. In de tijd dat CPU en geheugen schaars waren, was dit een geweldige manier om bronnen te besparen.

De zaken zijn echter veranderd. Computerhardware is nu vrij goedkoop en de aandacht is uitgegaan naar de serverconfiguratie. Een kleine fout bij het configureren van de server tijdens de implementatie kan rampzalige gevolgen hebben.

Spring pakt dit probleem aan door een plug-in aan te bieden, namelijk spring-boot-maven-plugin, om een ​​webtoepassing te verpakken als een uitvoerbare JAR. Om deze plug-in op te nemen, voegt u gewoon een inpluggen element naar pom.xml:

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

Met deze plug-in op zijn plaats, krijgen we een dikke JAR na het uitvoeren van het pakket fase. Deze JAR bevat alle benodigde afhankelijkheden, inclusief een embedded server. We hoeven ons dus geen zorgen meer te maken over het configureren van een externe server.

We kunnen de applicatie dan draaien op dezelfde manier als een gewone uitvoerbare JAR.

Merk op dat de verpakking element in het pom.xml bestand moet zijn ingesteld op pot om een ​​JAR-bestand te maken:

pot

Als we dit element niet opnemen, is het ook standaard pot.

Als we een WAR-bestand willen maken, wijzigt u het verpakking element naar oorlog:

oorlog

En laat de containerafhankelijkheid buiten het verpakte bestand:

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

Na het uitvoeren van de Maven pakket fase, hebben we een inzetbaar WAR-bestand.

V10. Hoe Spring Boot te gebruiken voor opdrachtregelapplicaties?

Net als elk ander Java-programma moet een Spring Boot-opdrachtregeltoepassing een hoofd methode. Deze methode dient als een toegangspunt, dat de SpringApplication # run methode om de applicatie op te starten:

@SpringBootApplication openbare klasse MyApplication {openbare statische leegte hoofd (String [] args) {SpringApplication.run (MyApplication.class); // andere verklaringen}}

De SpringApplication klasse vuurt vervolgens een Spring-container aan en configureert automatisch bonen.

Merk op dat we een configuratieklasse moeten doorgeven aan de rennen methode om te werken als de primaire configuratiebron. Volgens afspraak is dit argument de instapklasse zelf.

Nadat u het rennen methode, kunnen we andere instructies uitvoeren zoals in een gewoon programma.

V11. Wat zijn mogelijke bronnen van externe configuratie?

Spring Boot biedt ondersteuning voor externe configuratie, waardoor we dezelfde applicatie in verschillende omgevingen kunnen draaien. We kunnen eigenschappenbestanden, YAML-bestanden, omgevingsvariabelen, systeemeigenschappen en opdrachtregeloptie-argumenten gebruiken om configuratie-eigenschappen op te geven.

We kunnen dan toegang krijgen tot die eigenschappen met behulp van de @Waarde annotatie, een gebonden object via de @ConfigurationProperties annotatie, of de Milieu abstractie.

V12. Wat betekent het dat Spring Boot Relaxed Binding ondersteunt?

Relaxed binding in Spring Boot is van toepassing op de type-safe binding van configuratie-eigenschappen.

Met relaxte binding, de sleutel van een eigenschap hoeft niet exact overeen te komen met de naam van een eigenschap. Een dergelijke omgevingseigenschap kan worden geschreven in camelCase, kebab-case, snake_case of in hoofdletters met woorden gescheiden door onderstrepingstekens.

Als een eigenschap in een bean-klasse bijvoorbeeld de @ConfigurationProperties annotatie wordt genoemd myProp, kan het worden gebonden aan een van deze omgevingseigenschappen: myProp, mijn-prop, mijn_prop, of MY_PROP.

V13. Wat is Spring Boot Devtools gebruikt voor?

Spring Boot Developer Tools, of DevTools, is een set tools die het ontwikkelingsproces eenvoudiger maken. Om deze ontwikkelingstijdfuncties op te nemen, hoeven we alleen een afhankelijkheid toe te voegen aan het pom.xml het dossier:

 org.springframework.boot spring-boot-devtools 

De spring-boot-devtools module wordt automatisch uitgeschakeld als de applicatie in productie draait. Het herverpakken van archieven sluit deze module ook standaard uit. Daarom brengt het geen overhead met zich mee voor ons eindproduct.

DevTools past standaard eigenschappen toe die geschikt zijn voor een ontwikkelomgeving. Deze eigenschappen schakelen het cachen van sjablonen uit, schakelen logboekregistratie voor foutopsporing in voor de webgroep, enzovoort. Als gevolg hiervan hebben we deze verstandige ontwikkelingstijdconfiguratie zonder enige eigenschappen in te stellen.

Toepassingen die DevTools gebruiken, worden opnieuw opgestart wanneer een bestand op het klassenpad verandert. Dit is een zeer nuttige functie bij de ontwikkeling, omdat het snelle feedback geeft voor wijzigingen.

Standaard veroorzaken statische bronnen, inclusief weergavesjablonen, geen herstart. In plaats daarvan zorgt een wijziging van een resource ervoor dat de browser wordt vernieuwd. Merk op dat dit alleen kan gebeuren als de LiveReload-extensie in de browser is geïnstalleerd om te communiceren met de ingesloten LiveReload-server die DevTools bevat.

Zie Overzicht van Spring Boot DevTools voor meer informatie over dit onderwerp.

V14. Hoe integratietests schrijven?

Bij het uitvoeren van integratietests voor een Spring-applicatie, moeten we een ApplicationContext.

Om ons leven gemakkelijker te maken, biedt Spring Boot een speciale annotatie voor testen - @BuienRadarNL. Deze annotatie maakt een ApplicationContext van configuratieklassen aangegeven door zijn klassen attribuut.

In het geval dat de klassen attribuut niet is ingesteld, zoekt Spring Boot naar de primaire configuratieklasse. Het zoeken begint vanaf het pakket met de test totdat het een klasse vindt die is geannoteerd met @SpringBootApplication of @SpringBootConfiguration.

Bekijk onze tutorial over testen in Spring Boot voor gedetailleerde instructies.

V15. Waar wordt de veerbootactuator voor gebruikt?

In wezen brengt Actuator Spring Boot-applicaties tot leven door productieklare functies mogelijk te maken. Met deze functies kunnen we applicaties monitoren en beheren wanneer ze in productie zijn.

Het integreren van Spring Boot Actuator in een project is heel eenvoudig. Het enige wat we hoeven te doen is de veer-boot-starter-actuator voorgerecht in de pom.xml het dossier:

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

Spring Boot Actuator kan operationele informatie vrijgeven met behulp van HTTP- of JMX-eindpunten. De meeste applicaties gaan echter voor HTTP, waarbij de identiteit van een eindpunt en de / aandrijving prefix vormen een URL-pad.

Hier zijn enkele van de meest voorkomende ingebouwde eindpunten die Actuator biedt:

  • env: Bloot omgevingseigenschappen
  • Gezondheid: Toont informatie over de status van de applicatie
  • HTTPTrace: Geeft HTTP-trace-informatie weer
  • info: Toont willekeurige toepassingsinformatie
  • statistieken: Toont metrische informatie
  • houthakkers: Toont en wijzigt de configuratie van loggers in de applicatie
  • toewijzingen: Toont een lijst van alle @RequestMapping paden

Raadpleeg onze tutorial Spring Boot Actuator voor een gedetailleerd overzicht.

V16. Wat is een betere manier om een ​​Spring Boot-project te configureren - met behulp van eigenschappen of YAML?

YAML biedt veel voordelen ten opzichte van eigenschappenbestanden, zoals:

  • Meer duidelijkheid en betere leesbaarheid
  • Perfect voor hiërarchische configuratiegegevens, die ook worden weergegeven in een beter, beter leesbaar formaat
  • Ondersteuning voor kaarten, lijsten en scalaire typen
  • Kan meerdere profielen in hetzelfde bestand opnemen

Het schrijven kan echter een beetje moeilijk en foutgevoelig zijn vanwege de inspringingsregels.

Voor details en werkvoorbeelden verwijzen wij u naar onze Spring YAML vs Properties tutorial.

V17. Wat zijn de basisaantekeningen die Spring Boot biedt?

De primaire annotaties die Spring Boot biedt, bevinden zich in het org.springframework.boot.autoconfigure en zijn subpakketten. Hier zijn een paar basisprincipes:

  • @EnableAutoConfiguration - om Spring Boot te laten zoeken naar bonen voor automatische configuratie op zijn klassepad en deze automatisch toe te passen.
  • @SpringBootApplication - gebruikt om de hoofdklasse van een opstarttoepassing aan te duiden. Deze annotatie combineert @Configuratie, @EnableAutoConfiguration, en @BuienRadarNL annotaties met hun standaardattributen.

Spring Boot Annotations biedt meer inzicht in het onderwerp.

V18. Hoe kunt u de standaardpoort in Spring Boot wijzigen?

We kunnen de standaardpoort van een server die is ingesloten in Spring Boot op een van deze manieren wijzigen:

  • met behulp van een eigenschappenbestand - we kunnen dit definiëren in een application.properties (of application.yml) bestand met behulp van de eigenschap Server poort
  • programmatisch - in onze hoofdzaak @SpringBootApplication klasse, kunnen we de Server poort op de SpringApplication voorbeeld
  • met behulp van de opdrachtregel - wanneer de toepassing wordt uitgevoerd als een jar-bestand, kunnen we de server.port instellen als een java-opdrachtargument:
    java -jar -Dserver.port = 8081 myspringproject.jar 

V19. Welke embedded servers ondersteunt Spring Boot en hoe kan ik de standaard wijzigen?

Vanaf datum, Spring MVC ondersteunt Tomcat, Jetty en Undertow. Tomcat is de standaard applicatieserver die wordt ondersteund door Spring Boot's web beginner.

Spring WebFlux ondersteunt Reactor Netty, Tomcat, Jetty en Undertow met Reactor Netty als standaard.

In Spring MVC, om de standaard te wijzigen, laten we zeggen aan Jetty, moeten we Tomcat uitsluiten en Jetty opnemen in de afhankelijkheden:

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

Evenzo, om de standaardwaarde in WebFlux in UnderTow te veranderen, moeten we Reactor Netty uitsluiten en UnderTow opnemen in de afhankelijkheden.

"Het vergelijken van embedded servlet bevat in Spring Boot" bevat meer details over de verschillende embedded servers die we kunnen gebruiken met Spring MVC.

V20. Waarom hebben we veerprofielen nodig?

Bij het ontwikkelen van applicaties voor de onderneming hebben we doorgaans te maken met meerdere omgevingen, zoals Dev, QA en Prod. De configuratie-eigenschappen voor deze omgevingen zijn verschillend.

We gebruiken bijvoorbeeld een embedded H2-database voor Dev, maar Prod kan de propriëtaire Oracle of DB2 hebben. Zelfs als het DBMS in alle omgevingen hetzelfde is, zouden de URL's zeker verschillend zijn.

Om dit gemakkelijk en schoon te maken, Spring heeft de beschikking over profielen om de configuratie voor elke omgeving te scheiden. Zodat in plaats van dit programmatisch te onderhouden, de eigenschappen in afzonderlijke bestanden kunnen worden bewaard, zoals applicatie-dev. eigendommen en applicatie-prod. eigendommen . De standaard application.properties verwijst naar het momenteel actieve profiel met voorjaar. profielen. actief zodat de juiste configuratie wordt opgepikt.

Spring Profiles geeft een uitgebreid overzicht van dit onderwerp.

3. Conclusie

In deze tutorial zijn enkele van de meest kritische vragen over Spring Boot besproken waarmee je tijdens een technisch interview te maken kunt krijgen. We hopen dat ze je zullen helpen bij het vinden van je droombaan.


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