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ó.