您好,登錄后才能下訂單哦!
這篇文章給大家介紹什么是 Spring Boot ,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Spring Boot 項目的啟動注解是:@SpringBootApplication,其實它就是由下面三個注解組成的:
@Configuration
@ComponentScan
@EnableAutoConfiguration
其中 @EnableAutoConfiguration 是實現自動配置的入口,該注解又通過 @Import 注解導入了AutoConfigurationImportSelector,在該類中加載 META-INF/spring.factories 的配置信息。然后篩選出以 EnableAutoConfiguration 為 key 的數據,加載到 IOC 容器中,實現自動配置功能!
思考一下在你的虛擬機上部署應用程序需要些什么。
第一步:安裝 Java
第二部:安裝 Web 或者是應用程序的服務器(Tomat/Wbesphere/Weblogic 等等)
第三部:部署應用程序 war 包
如果我們想簡化這些步驟,應該如何做呢?
讓我們來思考如何使服務器成為應用程序的一部分?
你只需要一個安裝了 Java 的虛擬機,就可以直接在上面部署應用程序了,
是不是很爽?
這個想法是嵌入式服務器的起源。
當我們創建一個可以部署的應用程序的時候,我們將會把服務器(例如,tomcat)嵌入到可部署的服務器中。
例如,對于一個 Spring Boot 應用程序來說,你可以生成一個包含 Embedded Tomcat 的應用程序 jar。你就可以像運行正常 Java 應用程序一樣來運行 web 應用程序了。
嵌入式服務器就是我們的可執行單元包含服務器的二進制文件(例如,tomcat.jar)。
支持分布式事務,可以使用Spring Boot集成 Aatomikos來解決,但是我一般不建議這樣使用,因為使用分布式事務會增加請求的響應時間,影響系統的TPS。一般在實際工作中,會利用消息的補償機制來處理分布式的事務。
cas和oauth是一個解決單點登錄的組件,shiro主要是負責權限安全方面的工作,所以功能點不一致。但往往需要單點登陸和權限控制一起來使用,所以就有 cas+shiro或者oauth+shiro這樣的組合。
token一般是客戶端登錄后服務端生成的令牌,每次訪問服務端會進行校驗,一般保存到內存即可,也可以放到其他介質;redis可以做Session共享,如果前端web服務器有幾臺負載,但是需要保持用戶登錄的狀態,這場景使用比較常見。
我們公司使用oauth+shiro這樣的方式來做后臺權限的管理,oauth負責多后臺統一登錄認證,shiro負責給登錄用戶賦予不同的訪問權限。
在傳統的SOA治理中,使用rpc的居多;Spring Cloud默認使用restful進行服務之間的通訊。rpc通訊效率會比restful要高一些,但是對于大多數公司來講,這點效率影響甚微。我建議使用restful這種方式,易于在不同語言實現的服務之間通訊。
對于無狀態服務,首先說一下什么是狀態:如果一個數據需要被多個服務共享,才能完成一筆交易,那么這個數據被稱為狀態。進而依賴這個“狀態”數據的服務被稱為有狀態服務,反之稱為無狀態服務。
那么這個無狀態服務原則并不是說在微服務架構里就不允許存在狀態,表達的真實意思是要把有狀態的業務服務改變為無狀態的計算類服務,那么狀態數據也就相應的遷移到對應的“有狀態數據服務”中。
場景說明:例如我們以前在本地內存中建立的數據緩存、Session緩存,到現在的微服務架構中就應該把這些數據遷移到分布式緩存中存儲,讓業務服務變成一個無狀態的計算節點。遷移后,就可以做到按需動態伸縮,微服務應用在運行時動態增刪節點,就不再需要考慮緩存數據如何同步的問題。
@Cacheable ,用來聲明方法是可緩存,將結果存儲到緩存中以便后續使用相同參數調用時不需執行實際的方法,直接從緩存中取值。
@CachePut,使用 @CachePut 標注的方法在執行前,不會去檢查緩存中是否存在之前執行過的結果,而是每次都會執行該方法,并將執行結果以鍵值對的形式存入指定的緩存中。
@CacheEvict,是用來標注在需要清除緩存元素的方法或類上的,當標記在一個類上時表示其中所有的方法的執行都會觸發緩存的清除操作。
現代瀏覽器出于安全的考慮, HTTP 請求時必須遵守同源策略,否則就是跨域的 HTTP 請求,默認情況下是被禁止的,IP(域名)不同、或者端口不同、協議不同(比如 HTTP、HTTPS)都會造成跨域問題。
一般前端的解決方案有:
① 使用 JSONP 來支持跨域的請求,JSONP 實現跨域請求的原理簡單的說,就是動態創建<script>
標簽,然后利用<script>
的 SRC 不受同源策略約束來跨域獲取數據。缺點是需要后端配合輸出特定的返回信息。
② 利用反應代理的機制來解決跨域的問題,前端請求的時候先將請求發送到同源地址的后端,通過后端請求轉發來避免跨域的訪問。
后來 HTML5 支持了 CORS 協議。CORS 是一個 W3C 標準,全稱是”跨域資源共享”(Cross-origin resource sharing),允許瀏覽器向跨源服務器,發出 XMLHttpRequest 請求,從而克服了 AJAX 只能同源使用的限制。它通過服務器增加一個特殊的 Header[Access-Control-Allow-Origin]來告訴客戶端跨域的限制,如果瀏覽器支持 CORS、并且判斷 Origin 通過的話,就會允許 XMLHttpRequest 發起跨域請求。
前端使用了 CORS 協議,就需要后端設置支持非同源的請求,Spring Boot 設置支持非同源的請求有兩種方式。
第一,配置 CorsFilter。
@Configuration public class GlobalCorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.setAllowCredentials(true); config.addAllowedMethod("*"); config.addAllowedHeader("*"); config.addExposedHeader("*"); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); configSource.registerCorsConfiguration("/**", config); return new CorsFilter(configSource); } }
需要配置上述的一段代碼。第二種方式稍微簡單一些。
第二,在啟動類上添加:
public class Application extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) .allowedHeaders("*") .allowedOrigins("*") .allowedMethods("*"); } }
JPA本身是一種規范,它的本質是一種ORM規范(不是ORM框架,因為JPA并未提供ORM實現,只是制定了規范)因為JPA是一種規范,所以,只是提供了一些相關的接口,但是接口并不能直接使用,JPA底層需要某種JPA實現,Hibernate 是 JPA 的一個實現集。
JPA 是根據實體類的注解來創建對應的表和字段,如果需要動態創建表或者字段,需要動態構建對應的實體類,再重新調用Jpa刷新整個Entity。動態SQL,mybatis支持的最好,jpa也可以支持,但是沒有Mybatis那么靈活。
Spring 最初最核心的兩大核心功能 Spring Ioc 和 Spring Aop 成就了 Spring,Spring 在這兩大核心的功能上不斷的發展,才有了 Spring 事務、Spring Mvc 等一系列偉大的產品,最終成就了 Spring 帝國,到了后期 Spring 幾乎可以解決企業開發中的所有問題。
Spring Boot 是在強大的 Spring 帝國生態基礎上面發展而來,發明 Spring Boot 不是為了取代 Spring ,是為了讓人們更容易的使用 Spring 。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的開發便利性巧妙地簡化了分布式系統基礎設施的開發,如服務發現注冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用 Spring Boot 的開發風格做到一鍵啟動和部署。
Spring Cloud 是為了解決微服務架構中服務治理而提供的一系列功能的開發框架,并且 Spring Cloud 是完全基于 Spring Boot 而開發,Spring Cloud 利用 Spring Boot 特性整合了開源行業中優秀的組件,整體對外提供了一套在微服務架構中服務治理的解決方案。
用一組不太合理的包含關系來表達它們之間的關系。
Spring ioc/aop > Spring > Spring Boot > Spring Cloud
關于什么是 Spring Boot 就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。