Introduksjon til vårstartstartere

1. Oversikt

Avhengighetsstyring er kritiske aspekter ved ethvert komplekst prosjekt. Og å gjøre dette manuelt er mindre enn ideelt; jo mer tid du brukte på det jo mindre tid har du på de andre viktige aspektene av prosjektet.

Spring Boot-forretter ble bygget for å løse akkurat dette problemet. Start-POM-er er et sett med praktiske avhengighetsbeskrivere som du kan inkludere i applikasjonen din. Du får en one-stop-shop for all våren og relatert teknologi du trenger, uten å måtte jakte på eksempelkode og kopiere og lime inn masse avhengighetsbeskrivere.

Vi har mer enn 30 startstarter tilgjengelig - la oss se noen av dem i de følgende avsnittene.

2. Nettstarteren

La oss først se på å utvikle REST-tjenesten; vi kan bruke biblioteker som Spring MVC, Tomcat og Jackson - mange avhengigheter for en enkelt applikasjon.

Spring Boot-startere kan bidra til å redusere antall avhengigheter manuelt lagt til bare ved å legge til en avhengighet. Så i stedet for å spesifisere avhengighetene manuelt, legg bare til en startpakke som i følgende eksempel:

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

Nå kan vi opprette en REST-kontroller. For enkelhets skyld vil vi ikke bruke databasen og fokusere på REST-kontrolleren:

@RestController offentlig klasse GenericEntityController {private List entityList = new ArrayList (); @RequestMapping ("/ entity / all") offentlig Liste findAll () {return entityList; } @RequestMapping (value = "/ entity", method = RequestMethod.POST) public GenericEntity addEntity (GenericEntity entity) {entityList.add (entity); retur enhet; } @RequestMapping ("/ entity / findby / {id}") offentlig GenericEntity findById (@PathVariable Long id) {return entityList.stream (). filter (entity -> entity.getId (). equals (id)). findFirst (). get (); }}

De GenericEntity er en enkel bønne med id av typen Lang og verdi av typen String.

Det er det - når applikasjonen kjører, kan du få tilgang til // localhost: 8080 / entity / all og sjekke at kontrolleren fungerer.

Vi har laget en REST-applikasjon med ganske minimal konfigurasjon.

3. Teststarteren

For testing bruker vi vanligvis følgende sett med biblioteker: Spring Test, JUnit, Hamcrest og Mockito. Vi kan inkludere alle disse bibliotekene manuelt, men Spring Boot starter kan brukes til å automatisk inkludere disse bibliotekene på følgende måte:

 org.springframework.boot spring-boot-starter-test test 

Legg merke til at du ikke trenger å spesifisere versjonsnummeret til en gjenstand. Spring Boot vil finne ut hvilken versjon du skal bruke - alt du trenger å spesifisere er versjonen av spring-boot-starter-parent gjenstand. Hvis du senere må oppgradere Boot-biblioteket og avhengigheter, er det bare å oppgradere Boot-versjonen på ett sted, så vil den ta seg av resten.

La oss faktisk teste kontrolleren vi opprettet i forrige eksempel.

Det er to måter å teste kontrolleren på:

  • Bruke det latterlige miljøet
  • Bruke den innebygde Servlet-beholderen (som Tomcat eller Jetty)

I dette eksemplet bruker vi et hånlig miljø:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (classes = Application.class) @WebAppConfiguration public class SpringBootApplicationIntegrationTest {@Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; @Før offentlig ugyldig setupMockMvc () {mockMvc = MockMvcBuilders.webAppContextSetup (webApplicationContext) .build (); } @Test offentlig ugyldig gittRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect () kaster unntak {MediaType contentType = new MediaType (MediaType.APPLICATION_JSON.getType (), MediaType.APPLICATION_JSON.getSubtype (), Chars, "; Chars)") mockMvc.perform (MockMvcRequestBuilders.get ("/ entity / all")). andExpect (MockMvcResultMatchers.status (). isOk ()). andExpect (MockMvcResultMatchers.content (). contentType (contentType)). andExpect (jsonPath ("$", hasSize (4))); }}

Ovennevnte test kaller / enhet / alt endepunkt og verifiserer at JSON-svaret inneholder 4 elementer. For at denne testen skal bestå, må vi også initialisere listen vår i kontrollerklassen:

offentlig klasse GenericEntityController {private List entityList = new ArrayList (); {entityList.add (ny GenericEntity (1l, "entity_1")); entityList.add (ny GenericEntity (2l, "entity_2")); entityList.add (ny GenericEntity (3l, "entity_3")); entityList.add (ny GenericEntity (4l, "entity_4")); } // ...}

Det som er viktig her er at @WebAppConfiguration kommentar og MockMVC er en del av vårprøve modul, hasSize er en Hamcrest-matcher, og @Før er en JUnit-kommentar. Disse er alle tilgjengelige ved å importere en denne startavhengigheten.

4. Data JPA Starter

De fleste nettapplikasjoner har en slags utholdenhet - og det er ganske ofte JPA.

I stedet for å definere alle tilknyttede avhengigheter manuelt - la oss gå med starteren i stedet:

 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 runtime 

Legg merke til at vi utenfor boksen har automatisk støtte for minst følgende databaser: H2, Derby og Hsqldb. I vårt eksempel bruker vi H2.

La oss nå opprette depotet for enheten vår:

offentlig grensesnitt GenericEntityRepository utvider JpaRepository {}

På tide å teste koden. Her er JUnit-testen:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (klasser = Application.class) offentlig klasse SpringBootJPATest {@Autowired private GenericEntityRepository genericEntityRepository; @Test offentlig ugyldighet gittGenericEntityRepository_whenSaveAndRetreiveEntity_thenOK () {GenericEntity genericEntity = genericEntityRepository.save (ny GenericEntity ("test")); GenericEntity foundationEntity = genericEntityRepository.findOne (genericEntity.getId ()); assertNotNull (foundationEntity); assertEquals (genericEntity.getValue (), foundationEntity.getValue ()); }}

Vi brukte ikke tid på å spesifisere databaseleverandøren, URL-tilkoblingen og legitimasjonen. Ingen ekstra konfigurasjon er nødvendig ettersom vi drar nytte av de solide standardinnstillingene; men selvfølgelig kan alle disse detaljene fortsatt konfigureres om nødvendig.

5. Mail Starter

En veldig vanlig oppgave i bedriftsutvikling er å sende e-post, og det kan vanligvis være vanskelig å håndtere direkte med Java Mail API.

Spring Boot starter starter denne kompleksiteten - e-postavhengigheter kan spesifiseres på følgende måte:

 org.springframework.boot spring-boot-starter-mail 

Nå kan vi bruke direkte JavaMailSender, så la oss skrive noen tester.

For testformålet trenger vi en enkel SMTP-server. I dette eksemplet bruker vi Wiser. Slik kan vi inkludere det i vår POM:

 org.subethamail subethasmtp 3.1.7 test 

Den siste versjonen av Wiser finner du på Maven sentrale arkiv.

Her er kildekoden for testen:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (klasser = Application.class) offentlig klasse SpringBootMailTest {@Autowired privat JavaMailSender javaMailSender; privat klokere klokere; private String userTo = "[e-postbeskyttet]"; private String userFrom = "[e-postbeskyttet]"; private String subject = "Test subject"; private String textMail = "Tekstemne-post"; @Før offentlige ugyldig setUp () kaster unntak {final int TEST_PORT = 25; klokere = ny klokere (TEST_PORT); klokere.start (); } @Efter offentlig ugyldighet kaster tearDown () Unntak {wiser.stop (); } @Test offentlig ugyldig givenMail_whenSendAndReceived_thenCorrect () kaster Unntak {SimpleMailMessage melding = composeEmailMessage (); javaMailSender.send (melding); Listemeldinger = wiser.getMessages (); assertThat (meldinger, hasSize (1)); WiserMessage wiserMessage = messages.get (0); assertEquals (userFrom, wiserMessage.getEnvelopeSender ()); assertEquals (userTo, wiserMessage.getEnvelopeReceiver ()); assertEquals (subject, getSubject (wiserMessage)); assertEquals (textMail, getMessage (wiserMessage)); } privat streng getMessage (WiserMessage wiserMessage) kaster MessagingException, IOException {return wiserMessage.getMimeMessage (). getContent (). toString (). trim (); } privat streng getSubject (WiserMessage wiserMessage) kaster MessagingException {return wiserMessage.getMimeMessage (). getSubject (); } privat SimpleMailMessage composeEmailMessage () {SimpleMailMessage mailMessage = ny SimpleMailMessage (); mailMessage.setTo (userTo); mailMessage.setReplyTo (userFrom); mailMessage.setFrom (userFrom); mailMessage.setSubject (emne); mailMessage.setText (textMail); return mailMessage; }}

I testen ble den @Før og @Etter metodene er ansvarlige for å starte og stoppe e-postserveren.

Legg merke til at vi kobler oss til JavaMailSender bønne - bønnen var automatisk opprettet av Spring Boot.

Akkurat som alle andre standardinnstillinger i Boot, e-postinnstillingene for JavaMailSender kan tilpasses i application.properties:

spring.mail.host = localhost spring.mail.port = 25 spring.mail.properties.mail.smtp.auth = false

Så vi konfigurerte e-postserveren på lokal vert: 25 og vi krevde ikke autentisering.

6. Konklusjon

I denne artikkelen har vi gitt en oversikt over forretter, forklart hvorfor vi trenger dem og gitt eksempler på hvordan du kan bruke dem i prosjektene dine.

La oss oppsummere fordelene ved å bruke vårstarter:

  • øke håndterbarheten av pom
  • produksjonsklare, testede og støttede avhengighetskonfigurasjoner
  • redusere den totale konfigurasjonstiden for prosjektet

Den faktiske listen over forretter finner du her. Kildekoden for eksemplene finner du her.


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