SpringBoot是Spring家族中的一個全新的框架叮阅,它用來簡化Spring應(yīng)用程序的創(chuàng)建和開發(fā)過程刑巧,提供了各種依賴項以簡化構(gòu)建配置粉渠,話不多說漏策,讓我們一起來看看這些依賴的作用吧
Core
DevTools
spring-boot-devtools 是一個為開發(fā)者服務(wù)的模塊,其中最重要的功能就是自動應(yīng)用代碼更改到最新的App上面去只估。原理是在發(fā)現(xiàn)代碼有更改之后志群,重新啟動應(yīng)用,即熱部署蛔钙。速度比手動停止后再啟動快多了锌云,從而提高開發(fā)者的開發(fā)效率。Idea加入依賴后可能不會馬上起作用吁脱,解決方式:https://blog.csdn.net/wjc475869/article/details/52442484??這個解決方式不一定適用于所有人桑涎,如有問題再自己找解決方式
devtools特性:
屬性默認值
SpringBoot進行了大量的自動配置彬向,包括默認啟用緩存以提高性能。 一個這樣的例子是模板引擎使用的模板的緩存攻冷,例如娃胆,thymeleaf。 但在開發(fā)過程中等曼,盡可能快地查看更改更為重要里烦。
可以使用application.properties文件中的屬性spring.thymeleaf.cache = false為thymeleaf禁用緩存的默認行為。 我們不需要手動執(zhí)行此操作禁谦,spring-boot-devtools會自動為我們執(zhí)行此操作胁黑。
自動重啟
在典型的應(yīng)用程序開發(fā)環(huán)境中,開發(fā)人員可以進行一些更改州泊,構(gòu)建項目并部署/啟動應(yīng)用程序以使新更改生效丧蘸,或者嘗試利用JRebel等。
使用spring-boot-devtools拥诡,此過程也是自動化的触趴。 每當(dāng)文件在類路徑中發(fā)生變化時氮发,使用spring-boot-devtools的應(yīng)用程序?qū)?dǎo)致應(yīng)用程序重新啟動渴肉。 此功能的好處是驗證所做更改所需的時間大大減少了
實時重載
spring-boot-devtools模塊包括一個嵌入式LiveReload服務(wù)器,用于在資源更改時觸發(fā)瀏覽器刷新爽冕。
為了在瀏覽器中實現(xiàn)這一點仇祭,我們需要安裝LiveReload插件,其中一個實現(xiàn)是用于Chrome的Remote Live Reload颈畸。
全局配置
spring-boot-devtools提供了一種配置未與任何應(yīng)用程序耦合的全局設(shè)置的方法乌奇。 此文件名為.spring-boot-devtools.properties,位于$ HOME眯娱。
遠程調(diào)試與更新
spring-boot-devtools通過HTTP提供開箱即用的遠程調(diào)試功能礁苗,要具備此功能,需要將spring-boot-devtools打包為應(yīng)用程序的一部分徙缴。 這可以通過在maven中的插件中禁用excludeDevtools配置來實現(xiàn)试伙。
遠程客戶端監(jiān)視應(yīng)用程序類路徑以獲取遠程重新啟動功能所做的更改。 類路徑中的任何更改都會導(dǎo)致更新的資源被推送到遠程應(yīng)用程序并觸發(fā)重新啟動于样。
遠程客戶端啟動并運行時會推送更改疏叨,因為只能監(jiān)視已更改的文件。
Lombok
Lombok 是一種 Java實用工具穿剖,可用來幫助開發(fā)人員消除Java的冗長蚤蔓,尤其是對于簡單的Java對象(POJO), 它通過注釋實現(xiàn)這一目的。一個標(biāo)準(zhǔn)的Java bean 一般具有若干屬性糊余,每個屬性具有g(shù)etter()和setter()方法秀又,Lombok中也用到了注解单寂,但是它并沒有用到反射,而是通過一些奇技淫巧吐辙,在代碼編譯時期動態(tài)將注解替換為具體的代碼凄贩。所以JVM實際運行的代碼,和我們手動編寫的包含了各種工具方法的類相同袱讹。
如何使用lombok疲扎?以IntelliJ IDEA為例
第一步:添加Lombok IntelliJ插件以對IntelliJ的lombok支持:
查找菜單File > Settings > Plugins
點擊Browse repositories...
搜索Lombok Plugin
點擊Install plugin
重啟 IntelliJ IDEA
第二步:添加maven依賴
第三步:在代碼中使用注解,先給個原始POJO的例子
public class EmployeeWithoutLombok {
private StringempId;
private
StringfirstName;
private
Stringlastname;
private
Datedob;
private
StringphoneNo;
public
StringgetEmpId() {
return empId;
}
public void setEmpId(String empId) {
this.empId = empId;
}
public StringgetFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public StringgetLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public DategetDob() {
return dob;
}
public void setDob(Date dob) {
this.dob = dob;
}
public StringgetPhoneNo() {
return phoneNo;
}
public void setPhoneNo(String phoneNo) {
this.phoneNo = phoneNo;
}
}
使用lombok后:
@Getter
@Setter
public class EmployeeWithLombok {
private StringempId;
private
StringfirstName;
private
Stringlastname;
private
Datedob;
private
StringphoneNo;
// Code required for getter and setter method, not needed to write.
}
怎么樣是不是很簡潔呢
Configuration Processor
它的作用是能直接在配置文件中讀數(shù)據(jù)
使用方式:
第一步:引入maven依賴
第二步:在spring配置文件捷雕,xxx.properties或者xxx.yml中添加自定義配置(這里以yml為例)
test:
name: spring-boot-configuration-processor
第三步:創(chuàng)建一個自定義對象椒丧,名字叫什么隨意,需要加上注解@ConfigurationProperties(prefix = "test")救巷,這個test壶熏,對應(yīng)著配置文件中的test,而屬性name浦译,則對應(yīng)配置文件中的test下的name棒假。
@ConfigurationProperties(prefix ="test")
public class Test {
private Stringname;
public
Test() {}
public StringgetName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第四步:在任意一個configuration文件中,注冊這個對象的bean
@SpringBootApplication
public class TestApplication {
@Bean
public TesttestModel() {
return new Test();
}
}
第五步:直接使用即可
@RestController
public class TestController {
@Autowired
private Testtest;
@GetMapping("/")
public Stringhello() {
return test.getName();
}
}
啟動SpringBoot項目訪問localhost:8080得到結(jié)果:
spring-boot-configuration-processor
Session
一.為什么要spring-session
在傳統(tǒng)單機web應(yīng)用中精盅,一般使用tomcat/jetty等web容器時帽哑,用戶的session都是由容器管理。瀏覽器使用cookie中記錄sessionId叹俏,容器根據(jù)sessionId判斷用戶是否存在會話session妻枕。這里的限制是,session存儲在web容器中粘驰,被單臺服務(wù)器容器管理屡谐。
但是網(wǎng)站主鍵演變,分布式應(yīng)用和集群是趨勢(提高性能)蝌数。此時用戶的請求可能被負載分發(fā)至不同的服務(wù)器愕掏,此時傳統(tǒng)的web容器管理用戶會話session的方式即行不通。除非集群或者分布式web應(yīng)用能夠共享session顶伞,盡管tomcat等支持這樣做饵撑。但是這樣存在以下兩點問題:
需要侵入web容器,提高問題的復(fù)雜
web容器之間共享session枝哄,集群機器之間勢必要交互耦合
基于這些肄梨,必須提供新的可靠的集群分布式/集群session的解決方案,突破traditional-session單機限制(即web容器session方式挠锥,下面簡稱traditional-session)众羡,spring-session應(yīng)用而生。
二.比較traditional-session方案和spring-session方案
下圖展示了traditional-session和spring-session的區(qū)別
傳統(tǒng)模式中蓖租,當(dāng)request進入web容器粱侣,根據(jù)reqest獲取session時羊壹,如果web容器中存在session則返回,如果不存在齐婴,web容器則創(chuàng)建一個session油猫。然后返回response時,將sessonId作為response的head一并返回給客戶端或者瀏覽器柠偶。
但是上節(jié)中說明了traditional-session的局限性在于:單機session情妖。在此限制的相反面,即將session從web容器中抽出來诱担,形成獨立的模塊毡证,以便分布式應(yīng)用或者集群都能共享,即能解決蔫仙。
spring-session的核心思想在于此:將session從web容器中剝離料睛,存儲在獨立的存儲服務(wù)器中。目前支持多種形式的session存儲器:Redis摇邦、Database恤煞、MogonDB等。session的管理責(zé)任委托給spring-session承擔(dān)施籍。當(dāng)request進入web容器居扒,根據(jù)request獲取session時,由spring-session負責(zé)存存儲器中獲取session法梯,如果存在則返回苔货,如果不存在則創(chuàng)建并持久化至存儲器中。
spring-session在無需綁定web容器的情況下提供對集群session的支持立哑。并提供對以下情況的透明集成:
HttpSession:容許替換web容器的HttpSession
WebSocket:使用WebSocket通信時,提供Session的活躍
WebSession:容許以應(yīng)用中立的方式替換webflux的webSession
Cache
Spring Cache簡化了對緩存的操作姻灶,通過注解與配置就能輕松讀取和更新緩存铛绰。常用注解:@Cacheable?和@CachePut
@Cacheable注解會先查詢是否已經(jīng)有緩存,有會使用緩存产喉,沒有則會執(zhí)行方法并緩存捂掰。
@Cacheable(value ="unitCarAmount", key ="#unitId")
public long countCarAmountByUnitId(Long unitId) {
return countUnCachedCarAmountByUnitId(unitId);
}
@CachePut注解的作用就是更新緩存,注意要和對應(yīng)@Cacheable注解上的value和key匹配曾沈。
@CachePut(value="unitCarAmount", key ="#unitId")
public long refreshUnitCarAmountCache(Long unitId){
return unitService.countUnCachedCarAmountByUnitId(unitId);
}
Spring?Cache支持對redis这嚣、Ehcache、內(nèi)存等多種緩存的操作塞俱。
有一種情況可以不加入Spring?Cache的依賴姐帚,就是用redis緩存,redis自帶這種Cache功能障涯,只需要加入redis的依賴即可罐旗,加入依賴后不要忘了在啟動類加上@EnableCaching注解
org.springframework.boot
spring-boot-starter-data-redis
然后在application.yml中加入redis的配置并新建一個類膳汪,類上加@Repository注解,然后注入redis模板九秀,就可以使用Spring?Cache了遗嗽,所有緩存會被存到application.yml配置的redis中
@Autowired
StringRedisTemplatestringRedisTemplate;
@Autowired
RedisTemplateredisTemplate;
詳細介紹可以看這篇文章:https://www.cnblogs.com/yueshutong/p/9381540.html
Validation
使用注解提供驗證機制,如@NotNull
使用該注解的字段的值不能為null鼓蜒,否則驗證無法通過
@Entity
@Data
public class Person {
@Id
@GeneratedValue
private Integerid;
@NotNull(message ="name不能為空")
private Stringname;
private
Integerage;
}
在控制器接受參數(shù)時痹换,添加@Valid注解,可以通過BindingResult對象獲取相關(guān)的錯誤提示
public String indexUI(@Valid Person person, BindingResult result)
常用注解:
@NotNull使用該注解的字段的值不能為null都弹,否則驗證無法通過
@Null?修飾的字段在驗證時必須是null晴音,否則驗證無法通過
@Size?如下代碼表示,修飾的字段長度不能超過5或者低于
@Max?如下代碼表示缔杉,該字段的最大值為19锤躁,否則無法通過驗證。????
@Min?同理或详,被該注解修飾的字段的最小值系羞,不能低于某個值。
@AssertFalse該字段值為false時霸琴,驗證才能通過
@AssertTrue該字段值為true時椒振,驗證才能通過。
@DecimalMax?驗證小數(shù)的最大值?
@DecimalMin?驗證小數(shù)的最小值梧乘。
@Digits?驗證數(shù)字的整數(shù)位和小數(shù)位的位數(shù)是否超過指定的長度
@Future?驗證日期是否在當(dāng)前時間之后澎迎,否則無法通過校驗
@Past?驗證日期是否在當(dāng)前時間之前,否則無法通過校驗
@Pattern?用于驗證字段是否與給定的正則相匹配
Retry
spring retry是從spring batch獨立出來的一個能功能选调,主要實現(xiàn)了重試和熔斷夹供。對于重試是有場景限制的,不是什么場景都適合重試仁堪,比如參數(shù)校驗不合法哮洽、寫操作等(要考慮寫是否冪等)都不適合重試。遠程調(diào)用超時弦聂、網(wǎng)絡(luò)突然中斷可以重試鸟辅。在微服務(wù)治理框架中,通常都有自己的重試與超時配置莺葫,比如dubbo可以設(shè)置retries=1,timeout=500調(diào)用失敗只重試1次,超過500ms調(diào)用仍未返回則調(diào)用失敗渤早。在spring retry中可以指定需要重試的異常類型鹊杖,并設(shè)置每次重試的間隔以及如果重試失敗是繼續(xù)重試還是熔斷(停止重試)川尖。
樣例代碼:
@Retryable(value = SQLDataException.class, backoff = @Backoff(value =0L))
public Stringservice3()throws SQLDataException {
log.info("service3 open");
throw new
SQLDataException();
}
@Recover
public Stringrecover(SQLDataException ne) {
return "SQLDataException recover";
}
常用注解:
@Retryable:注解需要被重試的方法?
include 指定處理的異常類馍悟。默認為空?
exclude指定不需要處理的異常。默認為空?
vaue指定要重試的異常毅整。默認為空?
maxAttempts 最大重試次數(shù)闯团。默認3次?
backoff 重試等待策略刃唤。默認使用@Backoff注解
@Backoff:重試回退策略(立即重試還是等待一會再重試)?
不設(shè)置參數(shù)時,默認使用FixedBackOffPolicy,重試等待1000ms?
只設(shè)置delay()屬性時,使用FixedBackOffPolicy,重試等待指定的毫秒數(shù)?
當(dāng)設(shè)置delay()和maxDealy()屬性時眉枕,重試等待在這兩個值之間均態(tài)分布?
使用delay()恶复,maxDealy()和multiplier()屬性時,使用ExponentialBackOffPolicy?
當(dāng)設(shè)置multiplier()屬性不等于0時速挑,同時也設(shè)置了random()屬性時谤牡,使用ExponentialRandomBackOffPolicy
@Recover: 用于方法。用于@Retryable失敗時的“兜底”處理方法姥宝。@Recover注釋的方法必須要與@Retryable注解的方法“簽名”保持一致翅萤,第一入?yún)橐卦嚨漠惓#渌麉?shù)與@Retryable保持一致腊满,返回值也要一樣套么,否則無法執(zhí)行!
@CircuitBreaker:用于方法碳蛋,實現(xiàn)熔斷模式胚泌。
include 指定處理的異常類。默認為空?
exclude 指定不需要處理的異常肃弟。默認為空?
vaue 指定要重試的異常玷室。默認為空?
maxAttempts 最大重試次數(shù)零蓉。默認3次?
openTimeout 配置熔斷器打開的超時時間,默認5s穷缤,當(dāng)超過openTimeout之后熔斷器電路變成半打開狀態(tài)(只要有一次重試成功敌蜂,則閉合電路)?
resetTimeout 配置熔斷器重新閉合的超時時間,默認20s津肛,超過這個時間斷路器關(guān)
Aspects
簡單地概括:Spring AOP
Web
Web
其實就是 SpringMVC章喉,這個太熟悉了吧,不多講了
Reactive Web
Reactive Web指的是Spring WebFlux快耿。Spring WebFlux是基于響應(yīng)式流的囊陡,因此可以用來建立異步的、非阻塞的掀亥、事件驅(qū)動的服務(wù)撞反。它采用Reactor作為首選的響應(yīng)式流的實現(xiàn)庫,不過也提供了對RxJava的支持搪花。
由于響應(yīng)式編程的特性遏片,Spring WebFlux和Reactor底層需要支持異步的運行環(huán)境,比如Netty和Undertow撮竿;也可以運行在支持異步I/O的Servlet 3.1的容器之上吮便,比如Tomcat(8.0.23及以上)和Jetty(9.0.4及以上)。
spring-webflux上層支持兩種開發(fā)模式:?
類似于Spring WebMVC的基于注解(@Controller幢踏、@RequestMapping)的開發(fā)模式髓需;
Java 8 lambda 風(fēng)格的函數(shù)式開發(fā)模式。
Spring WebFlux也支持響應(yīng)式的Websocket服務(wù)端開發(fā)
WebFlux提供了與之前WebMVC相同的一套注解來定義請求的處理房蝉,使得Spring使用者遷移到響應(yīng)式開發(fā)方式的過程變得異常輕松僚匆。
只需修改少量的代碼,就能從命令式的搭幻、同步阻塞的(spring-webmvc + servlet + Tomcat)變成了響應(yīng)式的咧擂、異步非阻塞的(spring-webflux + Reactor + Netty)。Netty是一套異步的檀蹋、事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用程序框架和工具松申,能夠開發(fā)高性能、高可靠性的網(wǎng)絡(luò)服務(wù)器和客戶端程序俯逾,因此與同樣是異步的贸桶、事件驅(qū)動的響應(yīng)式編程范式一拍即合。
使用Spring WebFlux桌肴,雖然用了異步非阻塞模式但并不一定會讓響應(yīng)時間變短刨啸,但一定可以節(jié)省服務(wù)器資源
Rest?Repositories
首先得知道Rest是什么,http://www.ruanyifeng.com/blog/2014/05/restful_api.html?這篇文章中可以找到答案识脆。
REST web服務(wù)已成為在web上應(yīng)用程序集成的首選方式。在其核心中,REST定義了系統(tǒng)由客戶端交互的資源組成灼捂。這些資源以超媒體驅(qū)動的方式實現(xiàn)离例。Spring MVC為構(gòu)建這些服務(wù)提供了堅實的基礎(chǔ)。但是悉稠,對于多域?qū)ο笙到y(tǒng)宫蛆,即使實施REST web服務(wù)的最簡單原則也可能相當(dāng)乏味,并且導(dǎo)致大量樣板代碼的猛。Rest?Repositories即Spring Data REST耀盗,Spring Data REST構(gòu)建在Spring Data repositories之上,并自動將其導(dǎo)出為REST資源卦尊。它利用超媒體來允許客戶端查找存儲庫暴露的功能叛拷,并將這些資源自動集成到相關(guān)的超媒體功能中。
Rest?Repositories HAL Browser
HAL-browser?是基于hal+json的media type的API瀏覽器岂却,Spring Data Rest 提供了集成忿薇,加入依賴后在瀏覽器輸入http://127.0.0.1:8081/api/v1/browser/index.html#/api/v1就能測試編寫好的接口, 這個功能類似于Swagger
HATEOAS
HATEOAS(Hypermedia as the engine of application state)是 REST 架構(gòu)風(fēng)格中最復(fù)雜的約束躏哩,也是構(gòu)建成熟 REST 服務(wù)的核心署浩。它的重要性在于打破了客戶端和服務(wù)器之間嚴格的契約,使得客戶端可以更加智能和自適應(yīng)扫尺,而 REST 服務(wù)本身的演化和更新也變得更加容易筋栋。
即返回結(jié)果中提供鏈接,連向其他API方法正驻,使得用戶不查文檔弊攘,也知道下一步應(yīng)該做什么。比如拨拓,當(dāng)用戶向api.example.com發(fā)出請求肴颊,會得到這樣一個文檔。
上面代碼表示渣磷,文檔中有一個link屬性婿着,用戶讀取這個屬性就知道下一步該調(diào)用什么API了。rel表示這個API與當(dāng)前網(wǎng)址的關(guān)系(collection關(guān)系醋界,并給出該collection的網(wǎng)址)竟宋,href表示API的路徑,title表示API的標(biāo)題形纺,type表示返回類型丘侠。
Web Services
SpringWeb服務(wù)(SpringWS)是SpringCommunity的一個產(chǎn)品,專注于創(chuàng)建文檔驅(qū)動的Web服務(wù)逐样。SpringWeb服務(wù)旨在促進契約優(yōu)先的SOAP服務(wù)開發(fā)蜗字,允許使用多種方法之一來操作XML有效負載打肝,從而創(chuàng)建靈活的Web服務(wù)。SpringWS使最佳實踐變得簡單挪捕。
Jersy
Jersey RESTful 框架是開源的RESTful框架, 實現(xiàn)了JAX-RS (JSR 311 & JSR 339) 規(guī)范粗梭。它擴展了JAX-RS 參考實現(xiàn), 提供了更多的特性和工具级零, 可以進一步地簡化 RESTful service 和 client 開發(fā)断医。盡管相對年輕,它已經(jīng)是一個產(chǎn)品級的 RESTful service 和 client 框架奏纪。
SpringMVC在開發(fā)REST應(yīng)用時鉴嗤,是不支持JSR311/JSR339標(biāo)準(zhǔn)的。如果想要按照標(biāo)準(zhǔn)行事序调,最常用的實現(xiàn)了這兩個標(biāo)準(zhǔn)的框架就是Jersey和CxF了醉锅。但是,因為Jersey是最早的實現(xiàn)炕置,也是JSR311參考的主要對象荣挨,所以,可以說Jersey就是事實上的標(biāo)準(zhǔn)(類似Hibernate是JPA的事實上的標(biāo)準(zhǔn))朴摊,也是現(xiàn)在使用最為廣泛的REST開發(fā)框架之一默垄。
Websocket
服務(wù)器可以將消息實時推送給多個客戶端,這個也很常見了甚纲,不多說了口锭。
Rest Docs
SpringRest文檔的目的是幫助您為RESTful服務(wù)生成準(zhǔn)確易讀的文檔。編寫好測試代碼
編寫高質(zhì)量的文檔是困難的介杆。緩解這種困難的一種方法是使用適合工作的工具鹃操。為此,Spring Rest文檔默認使用asciidoctor春哨。asciidoctor處理純文本并生成HTML荆隘,根據(jù)您的需要進行樣式和布局。如果愿意赴背,還可以將Spring Rest文檔配置為使用降價椰拒。
SpringRestDocs使用由SpringMVC的測試框架、SpringWebFlux的WebTestClient或RESTAssured3編寫的測試生成的代碼片段凰荚。這種測試驅(qū)動的方法有助于確保服務(wù)文檔的準(zhǔn)確性燃观。如果代碼段不正確,則生成代碼段的測試將失敗便瑟。
記錄一個RESTful服務(wù)主要是描述其資源缆毁。每個資源描述的兩個關(guān)鍵部分是它使用的HTTP請求和它生成的HTTP響應(yīng)的詳細信息。Spring REST文檔允許您使用這些資源和HTTP請求和響應(yīng)到涂,從而將文檔與服務(wù)實現(xiàn)的內(nèi)部細節(jié)隔離開來脊框。這種分離幫助您記錄服務(wù)的API颁督,而不是它的實現(xiàn)。它還可以讓您在不必重新編寫文檔的情況下自由地發(fā)展實現(xiàn)缚陷。
Vaadin
Vaadin 是一個RIA的基于瀏覽器的富客戶端的Web框架适篙。與 JavaScript 庫或者是基于瀏覽器插件的解決方案不同,Vaadin 包含一個服務(wù)器端的結(jié)構(gòu)箫爷,主要的應(yīng)用邏輯都在服務(wù)器端運行,瀏覽器通過 Ajax 技術(shù)跟服務(wù)器端進行交互聂儒。Vaadin 提供多種各樣的UI組建虎锚,例如按鈕、表格衩婚、樹形列表等等窜护,每個組件都具有事件番舆、偵聽器矗愧、數(shù)據(jù)綁定和業(yè)務(wù)邏輯等功能。
Apache CXF
Web Services中較出色的一個
Ratpack
RATPACK是一組用于構(gòu)建可伸縮HTTP應(yīng)用程序的Java庫畜普。
Mobile
SpringMobile是一個框架奇昙,它提供了檢測向您的Spring網(wǎng)站發(fā)出請求的設(shè)備類型的功能护侮,并提供基于該設(shè)備的可選視圖。和所有的Spring項目一樣储耐,Spring Mobile的真正威力在于它可以多么容易地擴展羊初。
特征如下:
用于移動和平板設(shè)備服務(wù)器端檢測的設(shè)備解析器抽象
網(wǎng)站首選項管理,允許用戶指示他或她是否喜歡“普通”什湘、“移動”或“平板電腦”體驗
一種站點切換器长赞,能夠根據(jù)用戶的設(shè)備和可選的指定站點偏好,將用戶切換到最合適的站點(移動闽撤、平板或普通站點)得哆。
設(shè)備感知視圖管理,用于組織和管理特定設(shè)備的不同視圖
Template Engines
?Thymeleaf,?Freemarker, Mustache, Groovy Templates
模板引擎哟旗,沒有鶴立雞群的贩据,都差不多吧,比JSP性能好热幔,使用方式也比較簡單乐设,加maven坐標(biāo),新建特定的模板文件绎巨,加入scheme引用再使用對應(yīng)標(biāo)簽就行了近尚,這里以Thymeleaf為例
引用:
使用:
另外介紹一個Beetl,Beetl是由國人開發(fā)场勤,官方數(shù)據(jù)稱戈锻,Beetl的頁面渲染速度比Thymeleaf快十倍
Security
Security
Spring Security是一個功能強大歼跟、高度可定制的身份驗證和訪問控制框架。它是保護基于彈簧的應(yīng)用程序的事實標(biāo)準(zhǔn)格遭。
Spring Security是一個專注于向Java應(yīng)用程序提供身份驗證和授權(quán)的框架哈街。與所有Spring項目一樣,Spring安全的真正威力在于它可以很容易地擴展以滿足定制需求拒迅。
特征如下:
對認證和授權(quán)的全面和可擴展支持
防止會話固定骚秦、點擊劫持、跨站點請求偽造等攻擊
servlet API集成
與SpringWebMVC可選集成
OAuth2 Client,?OAuth2 Resource Server
OAuth 2 是一個授權(quán)框架璧微,或稱授權(quán)標(biāo)準(zhǔn)作箍,它可以使第三方應(yīng)用程序或客戶端獲得對HTTP服務(wù)上(例如 Google,GitHub )用戶帳戶信息的有限訪問權(quán)限前硫。OAuth 2 通過將用戶身份驗證委派給托管用戶帳戶的服務(wù)以及授權(quán)客戶端訪問用戶帳戶進行工作胞得。綜上,OAuth 2 可以為 Web 應(yīng)用 和桌面應(yīng)用以及移動應(yīng)用提供授權(quán)流程屹电。
更多介紹查看http://www.reibang.com/p/68f22f9a00ee
Okta
和OAuth2差不多阶剑,也是身份授權(quán)管理
SQL
MSQL, JDBC, MyBatis, SQL Server
太常見了,pass
JPA
Java持久API危号,JPA的總體思想和現(xiàn)有Hibernate牧愁、TopLink、JDO等ORM框架大體一致
H2
H2是一個用Java開發(fā)的嵌入式數(shù)據(jù)庫葱色,它本身只是一個類庫递宅,可以直接嵌入到應(yīng)用項目中。
H2最大的用途在于可以同應(yīng)用程序打包在一起發(fā)布苍狰,這樣可以非常方便地存儲少量結(jié)構(gòu)化數(shù)據(jù)办龄。
它的另一個用途是用于單元測試。啟動速度快淋昭,而且可以關(guān)閉持久化功能俐填,每一個用例執(zhí)行完隨即還原到初始狀態(tài)。
H2的第三個用處是作為緩存翔忽,作為NoSQL的一個補充英融。當(dāng)某些場景下數(shù)據(jù)模型必須為關(guān)系型,可以拿它當(dāng)Memcached使歇式,作為后端MySQL/Oracle的一個緩沖層驶悟,緩存一些不經(jīng)常變化但需要頻繁訪問的數(shù)據(jù),比如字典表材失、權(quán)限表痕鳍。不過這樣系統(tǒng)架構(gòu)就會比較復(fù)雜了
PostgreSQL
它包括了可以說是目前世界上最豐富的數(shù)據(jù)類型的支持,其中有些數(shù)據(jù)類型可以說連商業(yè)數(shù)據(jù)庫都不具備, 比如 IP 類型和幾何類型等笼呆;其次熊响,PostgreSQL 是全功能的自由軟件數(shù)據(jù)庫,很長時間以來诗赌,PostgreSQL 是唯一支持事務(wù)汗茄、子查詢、多版本并行控制系統(tǒng)(MVCC)铭若、數(shù)據(jù)完整性檢查等特性的唯一的一種自由軟件的數(shù)據(jù)庫管理系統(tǒng)洪碳。 Inprise 的 InterBase 以及SAP等廠商將其原先專有軟件開放為自由軟件之后才打破了這個唯一。最后奥喻,PostgreSQL擁有一支非撑脊活躍的開發(fā)隊伍,而且在許多黑客的努力下环鲤,PostgreSQL 的質(zhì)量日益提高
HSQLDB
HSQLDB是一款Java內(nèi)置的數(shù)據(jù)庫,非常適合在用于快速的測試和演示的Java程序中憎兽。(無需獨立安裝數(shù)據(jù)庫)?
HSQLDB有三種模式:?
1. Server 就像Mysql那樣?
2. In-Process 又叫做 Standalone 模式冷离,數(shù)據(jù)放在本地文件,伴隨JVM一起啟動纯命,是HSQLDB的主要應(yīng)用場景?
3. Memory-only西剥, 僅僅在內(nèi)存中,一旦重啟亿汞,數(shù)據(jù)就消失瞭空。
Apache Derby
將目光放在小 Derby 的原因是純綠色、輕巧疗我、內(nèi)存占用小咆畏,分分鐘在你機子跑起來,自己做點需要連接數(shù)據(jù)庫的代碼實踐非常方便
Liquibase
LiquiBase是一個用于數(shù)據(jù)庫重構(gòu)和遷移的開源工具吴裤,通過日志文件的形式記錄數(shù)據(jù)庫的變更旧找,然后執(zhí)行日志文件中的修改,將數(shù)據(jù)庫更新或回滾到一致的狀態(tài)麦牺。LiquiBase的主要特點有:
支持幾乎所有主流的數(shù)據(jù)庫钮蛛,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
支持多開發(fā)者的協(xié)作維護剖膳;
日志文件支持多種格式魏颓,如XML, YAML, JSON, SQL等;
支持多種運行方式吱晒,如命令行甸饱、Spring集成、Maven插件枕荞、Gradle插件等柜候;
Flyway
1. Flyway是什么
Flyway是一款開源的數(shù)據(jù)庫版本管理工具搞动,F(xiàn)lyway可以獨立于應(yīng)用實現(xiàn)管理并跟蹤數(shù)據(jù)庫的變更,F(xiàn)lyway根據(jù)自己的約定渣刷,不需要復(fù)雜的配置就可以實現(xiàn)數(shù)據(jù)的Migrate鹦肿。Migrations可以寫成SQL腳本,也可以寫在Java代碼中辅柴,F(xiàn)lyway還支持Spring Boot箩溃。
2. 為什么要使用Flyway
在真實的項目開發(fā)中,我們每個人都會有一個應(yīng)用軟件和與其相聯(lián)系的數(shù)據(jù)庫碌嘀。對于個人開發(fā)來說涣旨,這樣就夠了。但是股冗,項目開發(fā)一般都不止一個人霹陡,因此一定會出現(xiàn)我在我的本地有一套軟件和相應(yīng)的數(shù)據(jù)庫系統(tǒng),我的另一個同事會在他的本地有一套他自己的軟件和相應(yīng)的數(shù)據(jù)庫系統(tǒng)止状。我們需要面臨的第一個問題就是我們兩個人如何集成我們的數(shù)據(jù)庫系統(tǒng)烹棉,之后還要處理如何將數(shù)據(jù)庫系統(tǒng)遷移到測試環(huán)境和生產(chǎn)環(huán)境當(dāng)中去。
JOOQ
JOOQ 是基于Java訪問關(guān)系型數(shù)據(jù)庫的工具包怯疤,輕量浆洗,簡單,并且足夠靈活集峦,可以輕松的使用Java面向?qū)ο笳Z法來實現(xiàn)各種復(fù)雜的sql伏社。對于寫Java的碼農(nóng)來說ORMS再也熟悉不過了,不管是Hibernate或者Mybatis塔淤,都能簡單的使用實體映射來訪問數(shù)據(jù)庫摘昌。但有時候這些 ‘智能’的對象關(guān)系映射又顯得笨拙,沒有直接使用原生sql來的靈活和簡單凯沪,而且對于一些如:joins,union,?nested selects等復(fù)雜的操作支持的不友好第焰。JOOQ 既吸取了傳統(tǒng)ORM操作數(shù)據(jù)的簡單性和安全性,又保留了原生sql的靈活性妨马,它更像是介于 ORMS和JDBC的中間層挺举。對于喜歡寫sql的碼農(nóng)來說,JOOQ可以完全滿足你控制欲烘跺,可以是用Java代碼寫出sql的感覺來湘纵。
NoSQL
Redis,?Reactive Redis
內(nèi)存版數(shù)據(jù)庫,不用多說了吧
Reactive?Redis又是什么呢滤淳?首先要理解響應(yīng)式編程梧喷。
響應(yīng)式編程(reactive programming)是一種基于數(shù)據(jù)流(data stream)和變化傳遞(propagation of change)的聲明式(declarative)的編程范式。響應(yīng)式編程是一種通過異步和數(shù)據(jù)流來構(gòu)建事務(wù)關(guān)系的編程模型。響應(yīng)式編程可以加深你代碼抽象的程度铺敌,讓你可以更專注于定義與事件相互依賴的業(yè)務(wù)邏輯汇歹,而不是把大量精力放在實現(xiàn)細節(jié)上,同時偿凭,使用響應(yīng)式編程還能讓你的代碼變得更加簡潔具體參考
https://blog.csdn.net/get_set/article/details/79455258
以下加Reactive的都是響應(yīng)式的版本产弹,不再介紹
MongoDB, Reactive MongoDB
MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富弯囊,最像關(guān)系數(shù)據(jù)庫的痰哨。和Redis對比:https://www.cnblogs.com/java-spring/p/9488227.html
Embedded MongoDB
如果希望在一個頁面中包含更多(更少)的信息,就可以將更多(更少)的信息放在內(nèi)嵌文檔中匾嘱。MongoDB中斤斧,多和少可以權(quán)衡,舉個栗子霎烙,作者和文章之間可能是一對少的關(guān)系:每個作者只有幾篇文章撬讽。文章和評論之間是一對多的關(guān)系,每篇文章可以有很多條評論悬垃∪袂兀“少”的關(guān)系使用內(nèi)嵌的方式比較好,“多”的關(guān)系使用引用的方式比較好盗忱。
ElasticSearch
ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎羊赵,基于RESTful web接口趟佃。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布昧捷,是當(dāng)前流行的企業(yè)級搜索引擎闲昭。設(shè)計用于云計算中,能夠達到實時搜索靡挥,穩(wěn)定序矩,可靠,快速跋破,安裝使用方便
Solr
和ElasticSearch差不多簸淀。
Solr 利用 Zookeeper 進行分布式管理,而 Elasticsearch 自身帶有分布式協(xié)調(diào)管理功能;
Solr 支持更多格式的數(shù)據(jù)毒返,而 Elasticsearch 僅支持json文件格式租幕;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能拧簸,高級功能多有第三方插件提供劲绪;
Solr 在傳統(tǒng)的搜索應(yīng)用中表現(xiàn)好于 Elasticsearch,但在處理實時搜索應(yīng)用時效率明顯低于 Elasticsearch。
Solr 是傳統(tǒng)搜索應(yīng)用的有力解決方案贾富,但 Elasticsearch 更適用于新興的實時搜索應(yīng)用歉眷。
Cassandra, Reactive?Cassandra
Apache Cassandra是一個開源,分布式和分散式/分布式存儲系統(tǒng)(數(shù)據(jù)庫)颤枪,用于管理遍布世界各地的大量結(jié)構(gòu)化數(shù)據(jù)汗捡。它提供高可用性的服務(wù),沒有單點故障汇鞭。
下面列出了Apache Cassandra的一些值得注意的地方:
它是可擴展凉唐,容錯和一致的。
它是一個面向列的數(shù)據(jù)庫霍骄。
它的分布設(shè)計基于Amazon的Dynamo及其在Google的Bigtable上的數(shù)據(jù)模型台囱。
創(chuàng)建在Facebook,它與關(guān)系數(shù)據(jù)庫管理系統(tǒng)有很大的不同读整。
Cassandra實現(xiàn)了一個沒有單點故障的Dynamo風(fēng)格的復(fù)制模型簿训,但增加了一個更強大的“列族”數(shù)據(jù)模型。
Cassandra被一些最大的公司使用米间,如Facebook强品,Twitter,Cisco屈糊,Rackspace的榛,ebay,Netflix等逻锐。
Cassandra的特點
Cassandra因其卓越的技術(shù)特性而變得如此受歡迎。下面給出了Cassandra的一些特性:
彈性可擴展性-?Cassandra是高度可擴展的;?它允許添加更多的硬件以適應(yīng)更多的客戶和更多的數(shù)據(jù)根據(jù)要求昧诱。
始終基于架構(gòu)-?Cassandra沒有單點故障晓淀,它可以連續(xù)用于不能承擔(dān)故障的關(guān)鍵業(yè)務(wù)應(yīng)用程序。
快速線性性能- Cassandra是線性可擴展性的盏档,即它為你增加集群中的節(jié)點數(shù)量增加你的吞吐量凶掰。因此,保持一個快速的響應(yīng)時間蜈亩。
靈活的數(shù)據(jù)存儲-?Cassandra適應(yīng)所有可能的數(shù)據(jù)格式懦窘,包括:結(jié)構(gòu)化,半結(jié)構(gòu)化和非結(jié)構(gòu)化勺拣。它可以根據(jù)您的需要動態(tài)地適應(yīng)變化的數(shù)據(jù)結(jié)構(gòu)奶赠。
便捷的數(shù)據(jù)分發(fā)-?Cassandra通過在多個數(shù)據(jù)中心之間復(fù)制數(shù)據(jù),可以靈活地在需要時分發(fā)數(shù)據(jù)药有。
事務(wù)支持-?Cassandra支持屬性毅戈,如原子性苹丸,一致性,隔離和持久性(ACID)苇经。
快速寫入-?Cassandra被設(shè)計為在廉價的商品硬件上運行赘理。?它執(zhí)行快速寫入,并可以存儲數(shù)百TB的數(shù)據(jù)扇单,而不犧牲讀取效率商模。
Couchbase,?Reactive?Couchbase
couchbase是CouchDB和MemBase的合并。而memBase是基于Memcached的蜘澜。因此couchbase聯(lián)合了couchbase的簡單可靠和memcached的高性能施流,以及membase的可擴展性。
靈活的數(shù)據(jù)模型:couchbase中使用json格式存儲對象和對象之間的關(guān)系鄙信。
Redis 和Couchbase都是基于內(nèi)存的數(shù)據(jù)存儲系統(tǒng)瞪醋。在它們各自的官方描述中,Couchbase是高性能装诡,高伸縮性和高可用的分布式緩存系統(tǒng)银受;Redis是一個開源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng)。
Redis和Couchbase詳細對比:http://rdc.hundsun.com/portal/article/736.html
Neo4j
Neo4j是一個高性能的,NOSQL圖形數(shù)據(jù)庫鸦采,它將結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)上而不是表中宾巍。它是一個嵌入式的、基于磁盤的渔伯、具備完全的事務(wù)特性的Java持久化引擎顶霞,但是它將結(jié)構(gòu)化數(shù)據(jù)存儲在網(wǎng)絡(luò)(從數(shù)學(xué)角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎锣吼,該引擎具有成熟數(shù)據(jù)庫的所有特性
Gemfire
如果你了解Redis或memCached确丢,那么恭喜,你很快就能理解GemFire是什么吐限,沒錯,你可以把它理解為一個增強版的Redis褂始,具體在哪些方面增強诸典,我們?nèi)蘸舐摹H绻悴涣私釸edis崎苗,也沒有關(guān)系狐粱,先看官方網(wǎng)站上的說法:Pivotal GemFire is the distributed, in-memory database for developers who are building the highest scaling and performing data-centric apps in the world. 但是,按照我對它的理解胆数,我更愿意用下面的語言來描述它肌蜻,GemFire是一個高性能的分布式內(nèi)存對象緩存系統(tǒng),如果非要說它是數(shù)據(jù)庫必尼,那也只能算是一個Key/Value數(shù)據(jù)庫(我更愿意稱之為Key/Value存儲系統(tǒng))
Integration
Spring?Integration
使用Spring Framework鼓勵開發(fā)人員使用接口進行編碼蒋搜,并使用依賴注入(DI)為普通舊Java對象(POJO)提供執(zhí)行其任務(wù)所需的依賴項篡撵。 Spring Integration將這一概念更進一步,其中POJO使用消息傳遞范例連接在一起豆挽,并且各個組件可能不了解應(yīng)用程序中的其他組件育谬。這種應(yīng)用程序是通過組裝細粒度可重用組件來構(gòu)建的,以形成更高級別的功能帮哈。通過精心設(shè)計膛檀,這些流程可以模塊化,并在更高的層次上重復(fù)使用娘侍。
除了將細粒度組件連接在一起外咖刃,Spring Integration還提供多種通道適配器和網(wǎng)關(guān),以便與外部系統(tǒng)進行通信憾筏。通道適配器用于單向集成(發(fā)送或接收);網(wǎng)關(guān)用于請求/回復(fù)方案(入站或出站)嚎杨。有關(guān)適配器和網(wǎng)關(guān)的完整列表,請參閱參考文檔踩叭。
RabbitMQ
AMQP,即Advanced Message Queuing Protocol自脯,高級消息隊列協(xié)議斤富,是應(yīng)用層協(xié)議的一個開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計满力。消息中間件主要用于組件之間的解耦焕参,消息的發(fā)送者無需知道消息使用者的存在,反之亦然油额。 AMQP的主要特征是面向消息叠纷、隊列、路由(包括點對點和發(fā)布/訂閱)潦嘶、可靠性涩嚣、安全。 RabbitMQ是一個開源的AMQP實現(xiàn)掂僵,服務(wù)器端用Erlang語言編寫航厚,支持多種客戶端,如:Python锰蓬、Ruby幔睬、.NET、Java芹扭、JMS麻顶、C赦抖、PHP、ActionScript澈蚌、XMPP摹芙、STOMP等,支持AJAX宛瞄。用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息浮禾,在易用性、擴展性份汗、高可用性等方面表現(xiàn)不俗。
Kafka
Kafka也是消息隊列組件匆帚,這個很常用吸重,先說說使用方法再和RabbitMQ對比嚎幸。Springboot使用Kafka:
第一步:加入依賴
第二步:配置Kafka
spring:
kafka:
producer:
bootstrap-servers:
192.168.1.78:9092
group-id: test
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
bootstrap-servers:
192.168.1.70:9092
group-id: test
enable-auto-commit: true
auto-commit-interval: 1000
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
第三步:Kafka發(fā)送代碼
@Component
public class KafkaSender {
@Autowired
private KafkaTemplate kafkaTemplate;
/**
* 發(fā)送消息到kafka,主題為test
*/
public void sendTest(){
kafkaTemplate.send("test","hello,kafka? "? + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
}
}
第四步:Kafka消費代碼
public class KafkaConsumer {
/**
* 監(jiān)聽test主題,有消息就讀取
*
@param message
*/
@KafkaListener(topics = {"test"})
public void consumer(String message){
log.info("test topic message : {}", message);
}
}
第五步:測試啟動類代碼
@SpringBootApplication
@EnableScheduling
public class ServerApplication {
@Autowired
private KafkaSender kafkaSender;
public static void
main(String[] args) {
SpringApplication.run(ServerApplication.class, args);
}
//然后每隔1分鐘執(zhí)行一次
@Scheduled(fixedRate =1000 *60)
public void testKafka()throws Exception {
kafkaSender.sendTest();
}
}
Kafka和RabbitMQ對于他們的使用場景如下
RabbitMQ
1.RabbitMQ的消息應(yīng)當(dāng)盡可能的小田篇,并且只用來處理實時且要高可靠性的消息椎镣。
2.消費者和生產(chǎn)者的能力盡量對等衣陶,否則消息堆積會嚴重影響RabbitMQ的性能。
3.集群部署,使用熱備授翻,保證消息的可靠性。
kafka
1.應(yīng)當(dāng)有一個非常好的運維監(jiān)控系統(tǒng)翎蹈,不單單要監(jiān)控Kafka本身荤堪,還要監(jiān)控Zookeeper。(kafka強烈的依賴于zookeeper,如果zookeeper掛掉了碎赢,那么Kafka也不行了)
2.對消息順序不依賴肮塞,且不是那么實時的系統(tǒng)。
3.對消息丟失并不那么敏感的系統(tǒng)烁设。
4.從 A 到 B 的流傳輸装黑,無需復(fù)雜的路由,最大吞吐量可達每秒 100k 以上疚颊。
總結(jié):在實際生產(chǎn)應(yīng)用中材义,通常會使用kafka作為消息傳輸?shù)臄?shù)據(jù)管道,RabbitMQ作為交易數(shù)據(jù)作為數(shù)據(jù)傳輸管道款熬,主要的取舍因素則是是否存在丟數(shù)據(jù)的可能贤牛;RabbitMQ在金融場景中經(jīng)常使用殉簸,具有較高的嚴謹性返十,數(shù)據(jù)丟失的可能性更小洞坑,同事具備更高的實時性;而kafka優(yōu)勢主要體現(xiàn)在吞吐量上排拷,雖然可以通過策略實現(xiàn)數(shù)據(jù)不丟失监氢,但從嚴謹性角度來講,大不如RabbitMQ议街;而且由于kafka保證每條消息最少送達一次,有較小的概率會出現(xiàn)數(shù)據(jù)重復(fù)發(fā)送的情況涂身;
Kafka Streams
Kafka Streams是一個客戶端程序庫,用于處理和分析存儲在Kafka中的數(shù)據(jù)悍抑,并將得到的數(shù)據(jù)寫回Kafka或發(fā)送到外部系統(tǒng)。Kafka Stream基于一個重要的流處理概念记靡。如正確的區(qū)分事件時間和處理時間摸吠,窗口支持,以及簡單而有效的應(yīng)用程序狀態(tài)管理啼止。Kafka Streams的入口門檻很低: 你可以快速的編寫和在單臺機器上運行一個小規(guī)模的概念證明(proof-of-concept);而你只需要運行你的應(yīng)用程序部署到多臺機器上巩那,以擴展高容量的生產(chǎn)負載舶替。Kafka Stream利用kafka的并行模型來透明的處理相同的應(yīng)用程序作負載平衡舔庶。
Kafka Stream 的亮點:
設(shè)計一個簡單的、輕量級的客戶端庫弥鹦,可以很容易地嵌入在任何java應(yīng)用程序與任何現(xiàn)有應(yīng)用程序封裝集成朦促。
Apache Kafka本身作為內(nèi)部消息層,沒有外部系統(tǒng)的依賴禀忆,還有佳谦,它使用kafka的分區(qū)模型水平擴展處理,并同時保證有序矢棚。
支持本地狀態(tài)容錯蘑拯,非成昃剑快速、高效的狀態(tài)操作(如join和窗口的聚合)孔轴。
采用 one-recored-at-a-time(一次一個消息) 處理以實現(xiàn)低延遲剃法,并支持基于事件時間(event-time)的窗口操作。
提供必要的流處理原語(primitive)路鹰,以及一個 高級別的Steram DSL 和 低級別的Processor API
JMS(ActiveMQ),?JMS(Artemis)
老牌消息中間件贷洲,還是推薦用Kafka吧。晋柱。
Cloud Core,
Cloud Support
Cloud Config
Cloud Discovery
Cloud Routing
Cloud Circuit Breaker
Cloud Tracing
Cloud Messaging
Cloud AWS
Cloud Contract
Cloud系列就不介紹了,平時開發(fā)也不一定用的到彪腔,但應(yīng)該知道這是個什么東西盲厌,有什么用右蒲,SpringCloud教程: https://springcloud.cc/
Pivotal Cloud Foundry
Cloud Foundry是一個開源平臺即服務(wù)(PaaS),為您提供云蜈七,開發(fā)人員框架和應(yīng)用程序服務(wù)的選擇。 它是開源的伊诵,由Cloud Foundry Foundation管理。
Azure
微軟的云產(chǎn)品
Spring Cloud GCP
谷歌的云產(chǎn)品。有興趣可以去用一下谷歌柿扣、亞馬遜翻伺、微軟的云,有12個月免費時間卖鲤,但要辦類似paypal的國際信用卡亏钩,非常麻煩
I/O
Batch
輕量級,全面的批處理框架竞帽,旨在開發(fā)對企業(yè)系統(tǒng)日常運營至關(guān)重要的強大批處理應(yīng)用程序哗伯。
Spring Batch提供了可重復(fù)使用的功能举农,這些功能對于處理大量記錄至關(guān)重要棱貌,包括記錄/跟蹤,事務(wù)管理篮洁,作業(yè)處理統(tǒng)計薄湿,作業(yè)重啟绰更,跳過和資源管理。 它還提供更高級的技術(shù)服務(wù)和功能执俩,通過優(yōu)化和分區(qū)技術(shù)實現(xiàn)極高容量和高性能的批處理作業(yè)徐钠。 簡單和復(fù)雜的大批量批處理作業(yè)可以高度可擴展的方式利用框架來處理大量信息。
JavaMail API庫為開發(fā)電子郵件應(yīng)用程序提供必要的支持役首。 Spring改進了這個想法并為此提供了極好的支持尝丐。 它通過刪除在Java應(yīng)用程序中設(shè)置電子郵件支持的許多冗余屬性來簡化該技術(shù)。
Apache Camel
Apache Camel是一個基于已知企業(yè)集成模式的多功能開源集成框架衡奥。
Camel使您能夠以各種特定于域的語言定義路由和中介規(guī)則爹袁,包括基于Java的Fluent API,Spring或Blueprint XML配置文件以及Scala DSL杰赛。這意味著您可以在IDE中智能地完成路由規(guī)則,無論是在Java矮台,Scala還是XML編輯器中乏屯。
Apache Camel使用URI直接使用任何類型的傳輸或消息傳遞模型,如HTTP瘦赫,ActiveMQ辰晕,JMS,JBI确虱,SCA含友,MINA或CXF,以及可插入的組件和數(shù)據(jù)格式選項校辩。 Apache Camel是一個小型庫窘问,具有最小的依賴性,可以輕松嵌入任何Java應(yīng)用程序。無論使用哪種傳輸類型,Apache Camel都允許您使用相同的API? - 因此皱埠,請學(xué)習(xí)API一次黄虱,然后您就可以與開箱即用的所有組件進行交互。
Apache Camel支持Bean綁定拇泣,并與流行的框架(如CDI彩届,Spring拾并,Blueprint和Guice)無縫集成混埠。 Camel還為您的路線單元測試提供廣泛的支持怠缸。
LDAP
輕量級目錄訪問協(xié)議(LDAP)是一種開放的,與供應(yīng)商無關(guān)的行業(yè)標(biāo)準(zhǔn)應(yīng)用程序協(xié)議钳宪,用于通過Internet協(xié)議(IP)網(wǎng)絡(luò)訪問和維護分布式目錄信息服務(wù)揭北。目錄服務(wù)通過允許在整個網(wǎng)絡(luò)中共享有關(guān)用戶,系統(tǒng)使套,網(wǎng)絡(luò)罐呼,服務(wù)和應(yīng)用程序的信息,在開發(fā)Intranet和Internet應(yīng)用程序中發(fā)揮著重要作用侦高。作為示例嫉柴,目錄服務(wù)可以提供任何有組織的記錄集,通常具有分層結(jié)構(gòu)奉呛,例如公司電子郵件目錄计螺。類似地,電話簿是具有地址和電話號碼的訂戶列表瞧壮。Spring提供對LDAP的支持
Quartz Scheduler
Quartz是一個功能豐富的開源作業(yè)調(diào)度庫登馒,幾乎可以集成在任何Java應(yīng)用程序中 - 從最小的獨立應(yīng)用程序到最大的電子商務(wù)系統(tǒng)。 Quartz可用于創(chuàng)建簡單或復(fù)雜的計劃咆槽,以執(zhí)行數(shù)十陈轿,數(shù)百甚至數(shù)萬個作業(yè); 將任務(wù)定義為標(biāo)準(zhǔn)Java組件的作業(yè),這些組件可以執(zhí)行幾乎任何可以編程的程序秦忿。 Quartz Scheduler包含許多企業(yè)級功能麦射,例如支持JTA事務(wù)和集群。
Spring Shell
SpringShell項目的用戶可以通過依賴SpringShell jar并添加自己的命令(這些命令作為SpringBeans的方法來提供)灯谣,輕松地構(gòu)建一個功能齊全的shell(又稱命令行)應(yīng)用程序潜秋。創(chuàng)建命令行應(yīng)用程序可能很有用,例如與項目的RESTAPI交互胎许,或使用本地文件內(nèi)容峻呛。
特征:
彈簧外殼的特點包括
一個簡單的、注釋驅(qū)動的編程模型辜窑,用于生成自定義命令
使用Spring引導(dǎo)自動配置功能作為命令插件策略的基礎(chǔ)
選項卡完成钩述、著色和腳本執(zhí)行
自定義命令提示、shell歷史文件名穆碎、結(jié)果和錯誤處理
基于特定域標(biāo)準(zhǔn)動態(tài)啟用命令與bean驗證API集成
已經(jīng)內(nèi)置的命令切距,如清晰的屏幕、華麗的幫助惨远、退出
帶格式谜悟、對齊话肖、花哨邊框等的ASCII藝術(shù)表。
想要構(gòu)建如下命令
shell:>translate"hello world!"--fromen_US --to fr_FRbonjour monde!
可以用代碼:
@ShellComponentpublicclassTranslationCommands{privatefinalTranslationService service;@AutowiredpublicTranslationCommands(TranslationService service) {this.service = service;? ? }@ShellMethod"Translate text from one language to another.")publicString translate(@ShellOption(mandatory = true)String text,@ShellOption(mandatory = true, defaultValue ="en_US")Locale from,@ShellOption(mandatory = true)Locate to? ? ) {// invoke servicereturnservice.translate(text, from, to);? ? }}
Statemachine
有限狀態(tài)機葡幸,(英語:Finite-state machine, FSM)最筒,又稱有限狀態(tài)自動機,簡稱狀態(tài)機蔚叨,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)模型床蜘。
有限狀態(tài)機體現(xiàn)了兩點:首先是離散的,然后是有限的蔑水。
State:狀態(tài)這個詞有些難以定義邢锯,狀態(tài)存儲關(guān)于過去的信息,就是說它反映從系統(tǒng)開始到現(xiàn)在時刻的輸入變化搀别。
Actions & Transitions:轉(zhuǎn)換指示狀態(tài)變更,并且用必須滿足來確使轉(zhuǎn)移發(fā)生的條件來描述它歇父。動作是在給定時刻要進行的活動的描述蒂培。
Guards:檢測器出現(xiàn)的原因是為了檢測是否滿足從一個狀態(tài)切換到另外一個狀態(tài)的條件榜苫。
Event:事件垂睬,又見事件媳荒,籠統(tǒng)說來钳枕,對系統(tǒng)重要的某件事情被稱為事件。
Spring Statemachine 是應(yīng)用程序開發(fā)人員在Spring應(yīng)用程序中使用狀態(tài)機概念的框架逻淌。
Ops
Actuator, Actuator Docs
Spring Boot Actuator可以幫助你監(jiān)控和管理Spring Boot應(yīng)用么伯,比如健康檢查疟暖、審計卡儒、統(tǒng)計和HTTP追蹤等。所有的這些特性可以通過JMX或者HTTP endpoints來獲得俐巴。
Actuator同時還可以與外部應(yīng)用監(jiān)控系統(tǒng)整合骨望,比如 Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。這些系統(tǒng)提供了非常好的儀表盤欣舵、圖標(biāo)擎鸠、分析和告警等功能,使得你可以通過統(tǒng)一的接口輕松的監(jiān)控和管理你的應(yīng)用缘圈。
Actuator使用Micrometer來整合上面提到的外部應(yīng)用監(jiān)控系統(tǒng)劣光。這使得只要通過非常小的配置就可以集成任何應(yīng)用監(jiān)控系統(tǒng)袜蚕。
Actuator?Docs顧名思義就是Actuator 的文檔
Spring Boot Admin(Server), (Client)
Spring Boot Admin 提供了很多功能,如顯示 name绢涡、id 和 version牲剃,顯示在線狀態(tài),Loggers 的日志級別管理雄可,Threads 線程管理凿傅,Environment 管理等。Spring Boot Admin 是由服務(wù)端和客戶端組成
以上就是IntelliJ?IDEA中出現(xiàn)的SpringBoot所有依賴
下面附帶SpringBoot Enable系列注解
@EnableAspectJAutoProxy開啟AOP自動代理
@EnableAutoConfiguration開啟自動配置
@EnableAsync開啟異步数苫,被加了@Async的方法會異步執(zhí)行
@EnableCaching開啟Spring Cache
@EnableLoadTimeWeaving開啟代碼織入聪舒,在Java?語言中,從織入切面的方式上來看虐急,存在三種織入方式:編譯期織入箱残、類加載期織入和運行期織入。編譯期織入是指在Java編譯期戏仓,采用特殊的編譯器疚宇,將切面織入到Java類中;而類加載期織入則指通過特殊的類加載器赏殃,在類字節(jié)碼加載到JVM時敷待,織入切面;運行期織入則是采用CGLib工具或JDK動態(tài)代理進行切面的織入仁热。
@EnableConfigurationProperties當(dāng)這個注解應(yīng)用到你的@Configuration時榜揖, 任何被它注解的bean將自動被Environment屬性配置。
@EnableMBeanExport允許從Spring上下文以及所有被@ManagedResource注解的bean中默認導(dǎo)出所有標(biāo)準(zhǔn)MBean抗蠢。
@EnableScheduling開啟計劃任務(wù)
希望通過閱讀本文能讓您對SpringBoot的整個技術(shù)棧有一個更多的了解举哟,在針對某個功能尋求技術(shù)時能迅速想到并優(yōu)先使用本文提及的技術(shù)。