javascript
正义联盟的Spring靴
正義聯(lián)盟的黑暗時(shí)代已經(jīng)來臨,強(qiáng)大的Darkseid即將征服人類。 蝙蝠俠在《神力女超人》的幫助下,努力使聯(lián)盟與一個(gè)關(guān)鍵方面失聯(lián)。 適當(dāng)?shù)恼x聯(lián)盟成員管理系統(tǒng)。 由于時(shí)間不在他們身邊,他們不想經(jīng)歷繁瑣的過程,從頭開始用他們需要的所有東西來建立項(xiàng)目。 蝙蝠俠將艱巨的任務(wù)交給了他心愛的值得信賴的阿爾弗雷德·阿爾弗雷德(因?yàn)榱_賓是如此不可預(yù)測(cè)),他告訴蝙蝠俠他想起了一個(gè)叫做Spring Boot的東西,它可以幫助您設(shè)置所需的一切,從而可以編寫代碼您的應(yīng)用程序,而不會(huì)因?yàn)轫?xiàng)目設(shè)置配置的細(xì)微差別而陷入困境。 于是他進(jìn)入了。 讓我們與心愛的阿爾弗雷德(Alfred)談?wù)?#xff0c;他將立即利用Spring Boot建立正義聯(lián)盟成員管理系統(tǒng)。 自從蝙蝠俠喜歡直接使用REST API以來,至少現(xiàn)在是后端部分。
有許多方便的方法來設(shè)置Spring Boot應(yīng)用程序。 在本文中,我們將重點(diǎn)介紹下載軟件包(Spring CLI)并在Ubuntu上從頭進(jìn)行設(shè)置的傳統(tǒng)方式。 Spring還支持通過其工具在線打包項(xiàng)目。 您可以從此處下載最新的穩(wěn)定版本。 對(duì)于本文,我使用的是1.3.0.M1版本。
解壓縮下載的存檔后,首先,在配置文件中設(shè)置以下參數(shù);
SPRING_BOOT_HOME=<extracted path>/spring-1.3.0.M1PATH=$SPRING_BOOT_HOME/bin:$PATH然后在您的“ bashrc”文件中包括以下內(nèi)容;
. <extracted-path>/spring-1.3.0.M1/shell-completion/bash/spring最后執(zhí)行的操作是,當(dāng)您處理spring-cli以創(chuàng)建您的spring boot應(yīng)用程序時(shí),它將使您在命令行上自動(dòng)完成。 請(qǐng)記住同時(shí)“提供”配置文件和“ bashrc”文件,以使更改生效。
本文使用的技術(shù)棧如下:
- SpringREST
- Spring數(shù)據(jù)
- MongoDB
因此,讓我們通過發(fā)出以下命令開始為應(yīng)用程序創(chuàng)建模板項(xiàng)目。 請(qǐng)注意,可以通過找到的GitHub存儲(chǔ)庫下載示例項(xiàng)目
在這里 ;
這將使用Spring MVC和Spring Data以及嵌入式MongoDB生成一個(gè)maven項(xiàng)目。
默認(rèn)情況下,spring-cli創(chuàng)建一個(gè)名稱設(shè)置為“ Demo”的項(xiàng)目。 因此,我們將需要重命名生成的相應(yīng)應(yīng)用程序類。 如果您從上述我的GitHub存儲(chǔ)庫中簽出了源代碼,那么將完成此操作。
使用Spring boot,運(yùn)行應(yīng)用程序就像運(yùn)行項(xiàng)目創(chuàng)建的jar文件一樣簡單,該jar文件實(shí)際上是調(diào)用應(yīng)用程序的
用@SpringBootApplication注釋的類可引導(dǎo)Spring。 讓我們看看它的樣子。
然后,我們進(jìn)入域類,在其中使用spring-data和mongodb來定義數(shù)據(jù)層。 域類如下;
package com.justiceleague.justiceleaguemodule.domain;import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.index.Indexed; import org.springframework.data.mongodb.core.mapping.Document;/*** This class holds the details that will be stored about the justice league* members on MongoDB.* * @author dinuka**/ @Document(collection = "justiceLeagueMembers") public class JusticeLeagueMemberDetail {@Idprivate ObjectId id;@Indexedprivate String name;private String superPower;private String location;public JusticeLeagueMemberDetail(String name, String superPower, String location) {this.name = name;this.superPower = superPower;this.location = location;}public String getId() {return id.toString();}public void setId(String id) {this.id = new ObjectId(id);}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSuperPower() {return superPower;}public void setSuperPower(String superPower) {this.superPower = superPower;}public String getLocation() {return location;}public void setLocation(String location) {this.location = location;}}當(dāng)我們使用spring數(shù)據(jù)時(shí),它非常直觀,特別是如果您來自JPA / Hibernate背景。 注釋非常相似。 唯一的新事物是@Document批注,它表示我們mongo數(shù)據(jù)庫中集合的名稱。 我們還會(huì)在超級(jí)英雄的名字上定義一個(gè)索引,因?yàn)楦嗟牟樵儗@按名字搜索。
借助Spring-data,可以輕松定義存儲(chǔ)庫的功能,這些存儲(chǔ)庫支持通常的CRUD操作和一些讀取操作,而無需直接編寫即可。 因此,我們?cè)趹?yīng)用程序中也利用了Spring數(shù)據(jù)存儲(chǔ)庫的功能,存儲(chǔ)庫類如下:
package com.justiceleague.justiceleaguemodule.dao;import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.Query;import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail;public interface JusticeLeagueRepository extends MongoRepository<JusticeLeagueMemberDetail, String> {/*** This method will retrieve the justice league member details pertaining to* the name passed in.* * @param superHeroName* the name of the justice league member to search and retrieve.* @return an instance of {@link JusticeLeagueMemberDetail} with the member* details.*/@Query("{ 'name' : {$regex: ?0, $options: 'i' }}")JusticeLeagueMemberDetail findBySuperHeroName(final String superHeroName); }常規(guī)的保存操作由Spring在運(yùn)行時(shí)通過使用代理實(shí)現(xiàn),我們只需要在存儲(chǔ)庫中定義域類即可。
如您所見,我們僅定義了一種方法。 使用@Query批注,我們嘗試與正則表達(dá)式用戶一起尋找超級(jí)英雄。 選項(xiàng)“ i”表示嘗試在mongo db中查找匹配項(xiàng)時(shí),我們應(yīng)忽略大小寫。
接下來,我們繼續(xù)執(zhí)行我們的邏輯以通過我們的服務(wù)層存儲(chǔ)新的正義聯(lián)盟成員。
package com.justiceleague.justiceleaguemodule.service.impl;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;import com.justiceleague.justiceleaguemodule.constants.MessageConstants.ErrorMessages; import com.justiceleague.justiceleaguemodule.dao.JusticeLeagueRepository; import com.justiceleague.justiceleaguemodule.domain.JusticeLeagueMemberDetail; import com.justiceleague.justiceleaguemodule.exception.JusticeLeagueManagementException; import com.justiceleague.justiceleaguemodule.service.JusticeLeagueMemberService; import com.justiceleague.justiceleaguemodule.web.dto.JusticeLeagueMemberDTO; import com.justiceleague.justiceleaguemodule.web.transformer.DTOToDomainTransformer;/*** This service class implements the {@link JusticeLeagueMemberService} to* provide the functionality required for the justice league system.* * @author dinuka**/ @Service public class JusticeLeagueMemberServiceImpl implements JusticeLeagueMemberService {@Autowiredprivate JusticeLeagueRepository justiceLeagueRepo;/*** {@inheritDoc}*/public void addMember(JusticeLeagueMemberDTO justiceLeagueMember) {JusticeLeagueMemberDetail dbMember = justiceLeagueRepo.findBySuperHeroName(justiceLeagueMember.getName());if (dbMember != null) {throw new JusticeLeagueManagementException(ErrorMessages.MEMBER_ALREDY_EXISTS);}JusticeLeagueMemberDetail memberToPersist = DTOToDomainTransformer.transform(justiceLeagueMember);justiceLeagueRepo.insert(memberToPersist);}} 再說一遍,如果成員已經(jīng)存在,我們拋出一個(gè)錯(cuò)誤,否則我們添加該成員。 在這里您可以看到我們正在使用已經(jīng)實(shí)施的
我們之前定義的spring數(shù)據(jù)存儲(chǔ)庫的insert方法。
最終,Alfred準(zhǔn)備好使用Spring REST公開他剛剛通過REST API開發(fā)的新功能,以便Batman可以隨時(shí)隨地通過HTTP發(fā)送詳細(xì)信息。
package com.justiceleague.justiceleaguemodule.web.rest.controller;import javax.validation.Valid;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController;import com.justiceleague.justiceleaguemodule.constants.MessageConstants; import com.justiceleague.justiceleaguemodule.service.JusticeLeagueMemberService; import com.justiceleague.justiceleaguemodule.web.dto.JusticeLeagueMemberDTO; import com.justiceleague.justiceleaguemodule.web.dto.ResponseDTO;/*** This class exposes the REST API for the system.* * @author dinuka**/ @RestController @RequestMapping("/justiceleague") public class JusticeLeagueManagementController {@Autowiredprivate JusticeLeagueMemberService memberService;/*** This method will be used to add justice league members to the system.* * @param justiceLeagueMember* the justice league member to add.* @return an instance of {@link ResponseDTO} which will notify whether* adding the member was successful.*/@ResponseBody@ResponseStatus(value = HttpStatus.CREATED)@RequestMapping(method = RequestMethod.POST, path = "/addMember", produces = {MediaType.APPLICATION_JSON_VALUE }, consumes = { MediaType.APPLICATION_JSON_VALUE })public ResponseDTO addJusticeLeagueMember(@Valid @RequestBody JusticeLeagueMemberDTO justiceLeagueMember) {ResponseDTO responseDTO = new ResponseDTO(ResponseDTO.Status.SUCCESS,MessageConstants.MEMBER_ADDED_SUCCESSFULLY);try {memberService.addMember(justiceLeagueMember);} catch (Exception e) {responseDTO.setStatus(ResponseDTO.Status.FAIL);responseDTO.setMessage(e.getMessage());}return responseDTO;} }我們將功能作為JSON負(fù)載公開,因?yàn)楸M管Alfred有點(diǎn)老派并且有時(shí)更喜歡XML,但Batman卻無法獲得足夠的功能。
老家伙Alfred仍然想測(cè)試他的功能,因?yàn)門DD只是他的風(fēng)格。 因此,最后我們看一下Alfred編寫的集成測(cè)試,以確保正義聯(lián)盟管理系統(tǒng)的初始版本能夠按預(yù)期運(yùn)行。 請(qǐng)注意,盡管Alfred實(shí)際上涵蓋了更多內(nèi)容,您可以在上查看REST API測(cè)試,
GitHub存儲(chǔ)庫
就是這樣。 借助Spring Boot的強(qiáng)大功能,Alfred能夠通過公開的REST API獲得最低限度的正義聯(lián)盟管理系統(tǒng)。 我們將在接下來的時(shí)間基于該應(yīng)用程序構(gòu)建,并查看Alfred如何提出將這個(gè)應(yīng)用程序通過docker部署到由Kubernetes管理的Amazon AWS實(shí)例上。 激動(dòng)人心的時(shí)代即將來臨。
翻譯自: https://www.javacodegeeks.com/2017/07/spring-boot-justice-league.html
總結(jié)
以上是生活随笔為你收集整理的正义联盟的Spring靴的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: macosx jdk_MacOSX环境上
- 下一篇: linux 慢速外设(linux 慢)