Bevezetés a tavaszi indító indítókhoz

1. Áttekintés

A függőségkezelés minden komplex projekt kritikus szempontja. És ezt manuálisan megtenni kevesebb, mint ideális; minél több időt fordított rá, annál kevesebb idő jut a projekt egyéb fontos szempontjaira.

A Spring Boot indítókat pontosan ennek a problémának a kezelésére építették. A kezdő POM-ok kényelmes függőségi leírók, amelyeket felvehet az alkalmazásába. Egyablakos ügyintézést biztosít az összes szükséges Spring és kapcsolódó technológia számára, anélkül, hogy vadászni kellene a mintakóddal és a függőségi leírók rengeteg másolásával-beillesztésével.

Több mint 30 indító áll rendelkezésünkre - nézzünk meg néhányat a következő szakaszokban.

2. A Web Starter

Először nézzük meg a REST szolgáltatás fejlesztését; olyan könyvtárakat használhatunk, mint a Spring MVC, a Tomcat és a Jackson - sok függőség egyetlen alkalmazáshoz.

A Spring Boot indítók csak egy függőség hozzáadásával segíthetnek a manuálisan hozzáadott függőségek számának csökkentésében. Tehát a függőségek manuális megadása helyett adjon hozzá egy indítót, a következő példában leírtak szerint:

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

Most létrehozhatunk egy REST vezérlőt. Az egyszerűség kedvéért nem használjuk az adatbázist, és a REST vezérlőre koncentrálunk:

@RestController public class GenericEntityController {private List entitásList = new ArrayList (); @RequestMapping ("/ entitás / minden") nyilvános lista findAll () {return entitásList; } @RequestMapping (érték = "/ entitás", módszer = RequestMethod.POST) nyilvános GenericEntity addEntity (GenericEntity entitás) {entitásList.add (entitás); visszatérési egység; } @RequestMapping ("/ entitás / findby / {id}") nyilvános GenericEntity findById (@PathVariable Long id) {return entitásList.stream (). szűrő (entitás -> entitás.getId (). egyenlő (id)). findFirst (). get (); }}

A GenericEntity egy egyszerű bab id típusú Hosszú és érték típusú Húr.

Ennyi - a futó alkalmazással elérheti a // localhost: 8080 / entitás / all parancsot, és ellenőrizheti, hogy a vezérlő működik-e.

Hoztunk létre egy minimális konfigurációjú REST alkalmazást.

3. A tesztindító

A teszteléshez általában a következő könyvtárakat használjuk: Spring Test, JUnit, Hamcrest és Mockito. Manuálisan felvehetjük ezeket a könyvtárakat, de a Spring Boot starter segítségével ezeket a könyvtárakat automatikusan be lehet vonni a következő módon:

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

Figyelje meg, hogy nem kell megadnia egy műtárgy verziószámát. A Spring Boot kitalálja, hogy melyik verziót használja - csak a verzióját kell megadnia tavasz-bakancs-induló-szülő műalkotás. Ha később frissítenie kell a Boot könyvtárat és a függőségeket, akkor csak egy helyen frissítse a Boot verziót, és a többi gondoskodni fog róla.

Tényleg teszteljük az előző példában létrehozott vezérlőt.

Kétféle módon lehet tesztelni a vezérlőt:

  • Az ál-környezet használata
  • A beágyazott Servlet-tároló használata (például Tomcat vagy Jetty)

Ebben a példában egy makett környezetet fogunk használni:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (class = Application.class) @WebAppConfiguration public class SpringBootApplicationIntegrationTest {@Autowired private WebApplicationContext webApplicationContext; privát MockMvc mockMvc; @A nyilvános void beállítása előttMockMvc () {mockMvc = MockMvcBuilders.webAppContextSetup (webApplicationContext) .build (); } @Test public void givenRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect () dobja a (z) {MediaType contentType = new MediaType (MediaType.APPLICATION_JSON.getType (), MediaType.APPLICATION_JSON.getSame_set) nevet (Forrás mockMvc.perform (MockMvcRequestBuilders.get ("/ entitás / minden")). andExpect (MockMvcResultMatchers.status (). isOk ()). andExpect (MockMvcResultMatchers.content (). contentType (contentType)). andExpect (jsonPath ("$", hasSize (4))); }}

A fenti teszt a / entitás / mind végpontot, és ellenőrzi, hogy a JSON válasz 4 elemet tartalmaz-e. Ahhoz, hogy ez a teszt sikeres legyen, a vezérlő osztályban is inicializálnunk kell a listánkat:

public class GenericEntityController {private List entitásList = new ArrayList (); {entitásList.add (új GenericEntity (1l, "entitás_1")); entitásList.add (új GenericEntity (2l, "entitás_2")); entitásList.add (új GenericEntity (3l, "entitás_3")); entitásList.add (új GenericEntity (4l, "entitás_4")); } // ...}

Ami itt fontos, az az @WebAppConfiguration annotáció és MockMVC részei a tavaszi teszt modul, hasSize Hamcrest páros, és @Előtt egy JUnit kommentár. Ezek mind elérhetőek, ha importálnak egyet ebből az egy indító függőségből.

4. A Data JPA Starter

A legtöbb webalkalmazásnak van valamilyen kitartása - és ez gyakran a JPA.

Ahelyett, hogy az összes társított függőséget manuálisan definiálnánk - menjünk inkább az indítóval:

 org.springframework.boot spring-boot-starter-data-jpa com.h2database h2 futásidejű 

Figyelje meg, hogy a dobozból kiindulva automatikusan támogatjuk legalább a következő adatbázisokat: H2, Derby és Hsqldb. Példánkban a H2-et fogjuk használni.

Most hozzuk létre az entitásunk tárát:

nyilvános felület A GenericEntityRepository kiterjeszti a JpaRepository {}

Ideje tesztelni a kódot. Itt van a JUnit teszt:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (class = Application.class) public class SpringBootJPATest {@Autowired private GenericEntityRepository genericEntityRepository; @Test public void givenGenericEntityRepository_whenSaveAndRetreiveEntity_thenOK () {GenericEntity genericEntity = genericEntityRepository.save (új GenericEntity ("teszt")); GenericEntity foundEntity = genericEntityRepository.findOne (genericEntity.getId ()); assertNotNull (alapítottEntity); assertEquals (genericEntity.getValue (), foundEntity.getValue ()); }}

Nem töltöttünk időt az adatbázis-szolgáltató, az URL-kapcsolat és a hitelesítő adatok megadásával. Nincs szükség további konfigurálásra, mivel előnyben részesítjük a rendszeres indítás alapértelmezett értékeit; de természetesen ezek a részletek szükség esetén mégis konfigurálhatók.

5. A Mail Starter

A vállalati fejlesztésben nagyon gyakori feladat az e-mail küldés, és a Java Mail API-val való közvetlen foglalkozás általában nehéz lehet.

A Spring Boot starter elrejti ezt a bonyolultságot - a levelezési függőségeket a következő módon lehet meghatározni:

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

Most közvetlenül használhatjuk a JavaMailSender, ezért írjunk néhány tesztet.

A teszteléshez szükségünk van egy egyszerű SMTP szerverre. Ebben a példában a Wiser-t fogjuk használni. Így tudjuk beilleszteni a POM-ba:

 org.subethamail subethasmtp 3.1.7 teszt 

A Wiser legújabb verziója megtalálható a Maven központi adattárában.

Itt van a teszt forráskódja:

@RunWith (SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration (class = Application.class) nyilvános osztály SpringBootMailTest {@Autowired private JavaMailSender javaMailSender; bölcs bölcs bölcsebb; private String userTo = "[e-mail védett]"; private String userFrom = "[e-mail védett]"; privát karakterlánc tantárgy = "Tesztalany"; private String textMail = "Szövegtárgy levél"; @A nyilvános void előtt setUp () dobja a (z) {végső int TEST_PORT = 25 kivételt; bölcsebb = új bölcsebb (TEST_PORT); bölcsebb.kezdeni (); } @A nyilvános void után a tearDown () dobja a Kivételt {wiser.stop (); } @Test public void givenMail_whenSendAndReceived_thenCorrect () dobja a Kivételt {SimpleMailMessage message = composeEmailMessage (); javaMailSender.send (üzenet); Listázza az üzeneteket = wiser.getMessages (); assertThat (üzenetek, hasSize (1)); WiserMessage wiserMessage = messages.get (0); assertEquals (userFrom, wiserMessage.getEnvelopeSender ()); assertEquals (userTo, wiserMessage.getEnvelopeReceiver ()); assertEquals (subject, getSubject (wiserMessage)); assertEquals (textMail, getMessage (wiserMessage)); } privát String getMessage (WiserMessage wiserMessage) dobja az MessagingException, IOException {return wiserMessage.getMimeMessage (). getContent (). toString (). trim (); } privát karakterlánc getSubject (WiserMessage wiserMessage) dobja az MessagingException {return wiserMessage.getMimeMessage (). getSubject (); } privát SimpleMailMessage composeEmailMessage () {SimpleMailMessage mailMessage = új SimpleMailMessage (); mailMessage.setTo (userTo); mailMessage.setReplyTo (userFrom); mailMessage.setFrom (userFrom); mailMessage.setSubject (tárgy); mailMessage.setText (textMail); mail mail üzenet küldése; }}

A teszt során a @Előtt és @Utána A levelezési kiszolgáló elindításáért és leállításáért a

Figyelje meg, hogy a vezetéket bekötjük JavaMailSender bab - a bab volt automatikusan a Spring Boot készítette.

Csakúgy, mint a Boot bármely más alapértelmezett értéke, a JavaMailSender -ban testreszabható alkalmazás.tulajdonságok:

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

Tehát beállítottuk a levelező szervert helyi vendéglátó: 25 és nem volt szükségünk hitelesítésre.

6. Következtetés

Ebben a cikkben áttekintést adtunk az indítókról, elmagyaráztuk, miért van szükség rájuk, és példákat adtunk arra, hogyan lehet felhasználni a projektjeiben.

Összefoglaljuk a Spring Boot indítók használatának előnyeit:

  • növeli a pom kezelhetőségét
  • gyártásra kész, tesztelt és támogatott függőségi konfigurációk
  • csökkentse a projekt teljes konfigurációs idejét

A kezdők tényleges listája itt található. A példák forráskódja itt található.