當前位置:首頁 » 雲伺服器 » 微伺服器搭建spring

微伺服器搭建spring

發布時間: 2023-01-13 18:31:05

① 微服務框架之Spring Cloud簡介

在了解 Spring Cloud 之前先了解一下微服務架構需要考量的核心關鍵點,如下圖:

對於以上等核心關鍵點的處理,不需要我們重復造車輪, Spring Cloud 已經幫我們集成了,它使用 Spring Boot 風格將一些比較成熟的微服務框架組合起來,屏蔽掉了復雜的配置和實現原理,為快速構建微服務架構的應用提供了一套基礎設施工具和開發支持。

Spring Cloud 所提供的核心功能包含:

Spring Cloud架構圖

Spring Cloud子項目

Spring Cloud 旗下的子項目大致可以分為兩類:

如下:

1. Spring Cloud 與 Spring Boot

Spring Boot 可以說是微服務架構的核心技術之一。通過在 Spring Boot 應用中添加 Spring MVC 依賴,就可以快速實現基於 REST 架構的服務介面,並且可以提供對 HTTP 標准動作的支持。而且 Spring Boot 默認提供 JackJson 序列化支持,可以讓服務介面輸入、輸出支持 JSON 等。因此,當使用 Spring Cloud 進行微服務架構開發時,使用 Spring Boot 是一條必經之路。

2. Spring Cloud 與服務治理( Eureka )

服務治理是 Spring Cloud 的核心,在實現上其提供了兩個選擇,即 Consul 和 Netflix 的 Eureka 。

Eureka 提供了服務注冊中心、服務發現客戶端,以及注冊服務的 UI 界面應用。

在 Eureka 的實現中,節點之間相互平等,有部分注冊中心「掛掉」也不會對整個應用造成影響,即使集群只剩一個節點存活,也可以正常地治理服務。即使所有服務注冊節點都宕機, Eureka 客戶端中所緩存的服務實例列表信息,也可讓服務消費者能夠正常工作,從而保障微服務之間互相調用的健壯性和應用的彈性。

3. Spring Cloud 與客戶端負載均衡( Ribbon )

Ribbon 默認與 Eureak 進行無縫整合,當客戶端啟動的時候,從 Eureka 伺服器中獲取一份服務注冊列表並維護在本地,當服務消費者需要調用服務時, Ribbon 就會根據負載均衡策略選擇一個合適的服務提供者實例並進行訪問

Spring Cloud 通過集成 Netflix 的 Feign 項目,為開發者提供了聲明式服務調用,從而簡化了微服務之間的調用處理方式。並且默認 Feign 項目集成了 Ribbon ,使得聲明式調用也支持客戶端負載均衡功能。

4. Spring Cloud 與微服務容錯、降級( Hystrix )

為了給微服務架構提供更大的彈性,在 Spring Cloud 中,通過集成 Netflix 下子項目 Hystrix ,通過所提供的 @HystrixCommand 註解可以輕松為我們所開發的微服務提供容錯、回退、降級等功能。此外, Hystrix 也默認集成到 Feign 子項目中。

Hystrix 是根據「斷路器」模式而創建。當 Hystrix 監控到某服務單元發生故障之後,就會進入服務熔斷處理,並向調用方返回一個符合預期的服務降級處理( fallback ),而不是長時間的等待或者拋出調用異常,從而保障服務調用方的線程不會被長時間、不必要地佔用,避免故障在應用中的蔓延造成的雪崩效應。

而 Hystrix 的儀表盤項目( Dashboard )可以監控各個服務調用所消耗的時間、請求數、成功率等,通過這種近乎實時的監控和告警,可以及時發現系統中潛在問題並進行處理。

5. Spring Cloud 與服務網關( Zuul )

Spring Cloud 通過集成 Netflix 中的 Zuul 實現 API 服務網關功能,提供對請求的路由和過濾兩個功能

路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎。

過濾器功能則負責對請求的處理過程進行干預,是實現請求校驗、服務聚合等功能的基礎。

通過 Zuul ,可以將細粒度的服務組合起來提供一個粗粒度的服務,所有請求都導入一個統一的入口,對外整個服務只需要暴露一個 API 介面,屏蔽了服務端的實現細節。通過 Zuul 的反向代理功能,可以實現路由定址,將請求轉發到後端的粗粒度服務上,並做一些通用的邏輯處理。此外, Zuul 默認會與 Eureka 伺服器進行整合,自動從 Eureka 伺服器中獲取所有注冊的服務並進行路由映射,實現 API 服務網關自動配置。

6. Spring Cloud 與消息中間件( Stream )

Spring Cloud 為簡化基於消息的開發,提供了 Stream 子項目,通過建立消息應用抽象層,構建了消息收發、分組消費和消息分片等功能處理,將業務應用中的消息收發與具體消息中間件進行解耦,使微服務應用開發中可以非常方便地與 Kafka 和 RabbitMQ 等消息中間件進行集成。

Spring Cloud Bus 基於 Stream 進行擴展,可以作為微服務之間的事件、消息匯流排,用於服務集群中狀態變化的傳播。

比如 Spring Cloud Config 藉助 Bus ,可以實現配置的動態刷新處理。

7. Spring Cloud 與分布式配置中心( Config )

針對微服務架構下的配置文件管理需求, Spring Cloud 提供了一個 Config 子項目。 Spring Cloud Config 具有中心化、版本控制、支持動態更新和語言獨立等特性。

在 Config 子項目中將微服務應用分為兩種角色:配置伺服器( Config Server )和配置客戶端( Config Client )。使用配置伺服器集中地管理所有配置屬性文件,配置服務中心可以將配置屬性文件存儲到 Git 、 SVN 等具有版本管理倉庫中,也可以存放在文件系統中。默認採用 Git 的方式進行存儲,因此可以很容易地對配置文件進行修改,並實現版本控制。

8. Spring Cloud 與微服務鏈路追蹤( Sleuth )

Spring Cloud 中的 Sleuth 子項目為開發者提供了微服務之間調用的鏈路追蹤。

Sleuth 核心思想就是通過一個全局的 ID 將分布在各微服務服務節點上的請求處理串聯起來,還原了調用關系,並藉助數據埋點,實現對微服務調用鏈路上的性能數據的採集。

因此,通過 Sleuth 可以很清楚地了解到一個用戶請求經過了哪些服務、每個服務處理花費了多長時間,從而可以對用戶的請求進行分析。此外,通過將採集的數據發送給 Zipkin 進行存儲、統計和分析,從而可以實現可視化的分析和展示,幫助開發者對微服務實施優化處理。

9. Spring Cloud 與微服務安全( Security )

Spring Cloud Security 為我們提供了一個認證和鑒權的安全框架,實現了資源授權、令牌管理等功能,同時結合 Zuul 可以將認證信息在微服務調用過程中直接傳遞,簡化了我們進行安全管控的開發。

Spring Cloud Security 默認支持 OAuth 2.0 認證協議,因此單點登錄也可以非常容易實現,並且 OAuth2.0 所生成的令牌可以使用 JWT 的方式,進一步簡化了微服務中的安全管理。

10. Spring Cloud 的其他子項目

② SpringCloud(六)——微服務集群

為了避免Eureka的單點故障,我們搭建了Eureka集群。
要是微服務發生了單點故障怎麼辦呢?
那麼就要搭建微服務集群了。

我們再新建一個服務提供者,之前有了一個8001的提供者,我們用同樣的方式創建一個8002埠的提供者,可以參考我之前寫的:
https://www.jianshu.com/p/e1b08eeb1d1e

8001工程裡面的類和配置文件在8002里都要有一份,只不過我們要將埠改成8002。

因為之前只有一個服務提供者,我們也就無需區分請求發到了哪個服務。現在我們有兩個服務提供者了,所以我們要區分一下發到了哪個服務,需要再controller里改一下。

添加埠號的屬性,並且作為數據返回。
改造號了之後我們要先分別單獨發送一下8001和8002的服務看看是否可以返回,確保微服務沒問題。

服務提供者沒問題了接下來改造消費者。

消費者裡面需要改的有兩處controller和config

在消費者的controller里,我們通過restTemplate來和提供者進行通訊,之前的寫法是寫死了一個url來供restTemplate發送,因為提供者是集群模式了,所以我們就不能寫死發往8001的url了。
我們現在要使用服務名來發送服務。
這里的服務名就是注冊到Eureka的服務名。

所以我們要在controller裡面使用服務名做url。

因為我們使用了服務名,就不能直接解析成ip地址+埠號的形式了,需要我們在restTemplat上面添加@LoadBalanced註解,這個註解同時可以開啟我們默認的負載均衡策略。

先看一下我們啟動的工程:

Eureka集群和Payment提供者集群都已經搭建好了。並且注冊中心中也有實例信息。
那麼我們多發送幾個請求看看結果。

我們可以看到發送到消費者的服務被依次分發到8001和8002的兩個服務上了。
說明我們的負載均衡也生效了!

③ 使用 IDEA 從 0 開始搭建 Spring Cloud 微服務

以下內容均來源於一個微服務初學者的實踐,僅供參考。

首先啟動 Spring Cloud Eureka 注冊中心,其他部分都作為服務注冊到 Eureka ,並通過注冊的服務名互相訪問。Spring Cloud Config 提供統一的配置信息,供其他服務讀取。Provider 生產者服務不直接對外暴露,僅供 Consumer 消費者服務調用。用戶通過 Spring Cloud Gateway 統一訪問消費者服務。

首先創建一個空 Maven 項目,然後右鍵項目 -> New Mole ,選擇繼續創建空 Maven 模塊或者使用 Spring Initializr 構建 Spring Cloud 模塊。common模塊用於存放公共的 lib ,如 、model 、util 等。config-dev 存放配置文件,上傳到 git 之後供 Spring Cloud Config 讀取。

除了少數像 Spring Cloud Config 、Spring Cloud Gateway 這種獨立應用,大部分非空模塊都需要添加 spring-boot-starter-web 構建 Web 應用。下圖是使用 IDEA 的 Spring Initializr 快速構建新模塊。

下面貼上詳細的配置文件和註解,bootstrap.yml 具有高優先順序,會提前載入並且不會被 application.yml 覆蓋,spring.cloud.config 需要配置在 bootstrap.yml 中,否則不能正常從配置中心獲取配置信息。

application.yml

HobbyEurekaApplication.java

application.yml

application-dev.yml

HobbyConfigApplication.java

bootstrap.yml

config-dev/gateway.yml

HobbyGatewayApplication.java

在 Spring Cloud Gateway 的配置中已經展示過如何從 config-dev 配置倉庫中讀取配置文件。spring.cloud.config 和 eureka.client 都已經在 bootstrap.yml 中配置過,接下來不做贅述。多模塊項目中掃描其他模塊的 mybatis 文件需要做額外的配置。
application.yml

HobbyProviderTestApplication.java

消費者調用生產者可以使用 Feign 聲明式服務調用。
HobbyConsumerTestApplication.java

TestFeignService.java

TestServiceImpl.java

Spring Cloud Eureka >> Spring Cloud Config >> Spring Cloud Gateway >> 其他服務

微服務架構能夠將各種服務解耦,單獨部署,配合 devops 才能展現出真正的威力,否則運維的工作會苦不堪言。gitlab 目前已經集成了 devops 功能,只要在項目中添加 .gitlab-ci.yml ,push 到 Gitlab 之後就會自動執行配置的命令,這里簡單介紹一下 gitlab 的安裝部署。
CentOS7 自帶的 Git 版本號是 1.8.3.1 ,需要更新,否則 Gitlab Runner 在進行自動構建的時候會報錯 fatal: git fetch-pack: expected shallow list ,更新步驟如下:

Gitlab 安裝官方文檔
Gitlab Runner 安裝官方文檔

配置文件的地址 /etc/gitlab/gitlab.rb
修改配置文件的操作:

常用配置:

④ 【微服務】- SpringBoot Admin

目錄:

Spring Boot Admin 用於管理和監控一個或者多個Spring Boot應用, Spring Boot Admin 分為Server端和Client端,Client通過http向Server端注冊, 也可以結合Spring Cloud 的服務注冊組件Eureka 進行注冊。

SpringAdmin 的監測詳細信息有如下:

本文的所有工程的Spring Boot版本為2.2.2.RELEASE,SpringBootAdmin版本為2.2.1。

這樣Admin Server就創建好了。

到此,SpringBoot-Admin-Client 工程創建完成。

啟動Admin-Server,Admin-Client兩個工程,在瀏覽器上輸入localhost:8769 ,瀏覽器顯示的界面如下:

查看wallboard:

更多監控信息,自己體驗。

eureka-server搭建完畢。

到此admin-server 搭建完成。

到此,Eureka-Server,Admin-Server-Eureka-Client,Admin-Client-Eureka-Cleint 三個工程搭建完成

啟動三個工程,在瀏覽器上訪問localhost:8769,瀏覽器會顯示和上一小節一樣的界面。

在2.1.0版本中去掉了hystrix dashboard,登錄界面默認集成到了spring security模塊,只要加上spring security就集成了登錄模塊。

重啟啟動工程,在瀏覽器上訪問: http://localhost:8769/ ,會被重定向到登錄界面,登錄的用戶名和密碼為配置文件中配置的,分別為admin和admin,界面顯示如下:

源碼: https://github.com/lbshold/springboot/tree/master/Spring-Boot-Admin-Demo

⑤ 1. SprignCloud之快速搭建一個簡單的微服務工程

springcloud 工程是基於 springboot 工程的。所以我們的父工程的pom直接繼承spring-boot-starter-parent,讓所有的子工程也作為springboot項目。

然後指定spring-cloud的依賴版本統一為Finchley.RELEASE,這樣子工程在引入springcloud相關包的時候就不用特意指定版本了。

我們選擇 eureka 作為注冊中心。

新建一個子工程,指定parent為剛才我們建立的父工程

Eureka 服務端啟動器導入

Eureka 服務端 完整pom文件:

application.properties 配置文件

啟動類

新建一個子工程 訂單服務,實際上是eureka的客戶端。

同樣指定parent為剛才我們建立的父工程

引入eureka客戶端的pom依賴,以及web包,用來與eureka-server端進行通信。

訂單服務完整pom文件:

bootstrap.properties配置文件

啟動類

新建一個子工程 訂單服務,實際上是eureka的客戶端。

同樣指定parent為剛才我們建立的父工程

引入eureka客戶端的pom依賴,以及web包,用來與eureka-server端進行通信。

用戶服務完整pom文件:

bootstrap.properties

啟動類

先啟動注冊中心 eureka服務端工程, 然後啟動兩個eureka客戶端:訂單服務和用戶服務,看看這兩個服務是否都注冊到注冊中心了。

當訂單服務和用戶服務 啟動注冊成功時, 會發現eureka服務端 會有 注冊服務實例成功的日誌。

查看eureka的 監控頁面 http://127.0.0.1:9001/ ,可以看到 服務列表裡已經 有 訂單服務和用戶服務了。

當訂單服務 和 用戶服務都成功注冊 到 注冊中心之後,那麼 這兩個服務 都會定時的從注冊中心拉取服務列表, 用於調用。

我們讓 訂單服務 作為服務提供者,讓用戶服務調用,測試一下能否調用成功。

模擬 返回某個用戶的訂單信息

瀏覽器 調用 用戶服務的 /user/orderList介面:

可以看到已經成功通過用戶服務的/user/ordeeList介面 調用到了訂單服務的/order/list 介面。

⑥ Spring Cloud 微服務實戰

閱讀《Spring微服務實戰》筆記

項目地址: https://gitee.com/liaozb1996/spring-cloud-in-action

配置管理原則:

Spring Cloud Config 後端存儲:文件系統、Git

標注引導類:

配置伺服器配置:

創建配置文件:

訪問配置:

客戶端配置:

spring-cloud-config-client 依賴

boostrap.properties

刷新屬性:

服務發現至關重要的原因:

傳統服務位置解析(DNS+負載均衡器)的缺點:

服務發現實現組件:

構建 Eureka 服務:

標注引導類:

單機模式配置 :

每次注冊服務都需要等待30秒,因為 eureka 需要連續接收 3 個心跳包才能使用該服務。

緩存注冊表後,客戶端每隔30秒會重新到 eureka 刷新注冊表。

服務注冊:

解決多網卡問題:

通過API獲取注冊表信息:(設置請求頭 Accept:application/json )

http://localhost:8761/eureka/apps

http://localhost:8761/eureka/apps/organization

與 Ribbon 交互的客戶端:

當使用二方包時需要在引導類添加 @EntityScan :

配置 RestTemplate:

DiscoveryClient:

支持 Ribbon 的 RestTemplate:

Feign:

OpenFeign 依賴:

Feign 會在運行時動態生成代理對象:

遠程調用包括對遠程資源和遠程服務的調用。

遠程調用會遇到兩個問題:

四種客戶端彈性模式:

為什麼客戶端彈性模式很重要:

客戶端彈性模式提供了三種構建能力:

在引導類啟動斷路器:

配置屬性手冊: https://github.com/Netflix/Hystrix/wiki/Configuration

使用 Hystrix 默認配置對遠程調用進行管理:

超時配置: execution.isolation.thread.timeoutInMilliseconds

配置後備策略:後備方法必須在同一類中並且具有相同的方法簽名

配置艙壁:

Hystrix 斷路的策略:

Hystrix 有三個級別的配置:

類級別配置:

Hystrix 有兩個隔離策略:

如果使用 TREAD 策略,並且要將父線程的上下文傳遞到子線程中,需要自定義 HystrixConcurrencyStrategy

Zuul 提供的功能:路由映射、構建過濾器

依賴:zuul、eureka-client

標注引導類:

zuul 配置:



Zuul路由映射機制:

查詢路由: http://localhost:8080/actuator/routes

調用服務: http://localhost:8080/license/license/1 (第一個 license 是服務ID,/license/1 是請求路徑)

使用服務發現手動映射路由:

添加前綴:

手動配置靜態路由:前面都是基於 eureka 上的服務id進行路由映射的,而這里是直接配置URL

Git + http://localhost:8080/actuator/refresh (POST)

Zuul 使用 Hystrix 和 Ribbon

Zuul 支持三種過濾器類型:前置過濾器、後置過濾器、路由過濾器

前置過濾器:向通過網關的請求添加 tracking-id

這里使用了 Zuul 的 RequestContext:

Zuul 不允許直接修改請求頭部,這里通過 addZuulRequestHeader 添加頭部信息,在調用遠程服務會自動合並

為了方便應用獲取 tracking-id,這里使用 Filter 獲取請求頭信息並映射到 UserContext 中:

為了在服務間調用傳播 tracking-id 這里需要定義一個 和 RestTemplate:

項目中 license 會遠程調用 orgnization,這里需要在兩個微服務配置 Filter

⑦ SpringCloud之微服務項目搭建-孰能生巧

初門級別搭建SpringCloud 微服務項目
整理網關、認證、redis、其它服務。

項目創建省略
1.1 版本
Springboot 2.2.5 版本
Springcloud版本 Hoxton.SR8
1.2 父工程名
xxx-springcloud-parent
1.3 父工程引入 pom 依賴包

1.4 父工程搭建完畢

二、公共服務搭建
右鍵父工程依次創建

公共服務主要存放公共資源,例如工具類,實體類等。
2.1 服務命名:xxx-commons

三、注冊中心服務
3.1 服務名:xxx-register
3.2 引入依賴包

3.3 application.yml

3.4 啟動類:Application

四、客戶服務
主要用於一個客戶服務模塊
服務名稱:customer-server
4.1 依賴包

4.2. application.yml

4.2 啟動類Application

五、認證中心服務
5.1 服務名:customer-oauth2-server
5.2 引入依賴包

5.3 application.yml

5.4 啟動類

六、網關服務
6.1 服務名:customer-gateway
6.2 引入依賴包

6.3 application.yml

6.4. 啟動類

6.5 配置白名單實體類

6.6 過濾 filter

7.訪問路徑
由於配置了網關服務,埠為80
直接訪問 http://localhost/ 地址
8.結束語
主要是通過學習網上視頻和網路查找資料整理而來
9.有什麼不懂可留言下方,小白相互學習討論,歐了~

⑧ 微服務 Spring Cloud Alibaba 項目搭建(一、框架介紹)

主要是為了記錄 從0到1 搭建Spring Cloud Alibaba 項目的詳細步驟,方便想學習搭建Spring Cloud 項目的小夥伴們提供一個詳細的示例,歡迎各位大佬評論,互相學習,共同進步。
gitee地址: https://gitee.com/mybride/bi_cloud

⑨ Spring微服務灰度發布(熱部署)的實現(二)

接著上篇說,我們微服務中用到的nepxion discovery主要採用了三種灰度發布方式,一種是web圖形化界面發布,二是zuul過濾器灰度發布,三是業務參數策略灰度發布。下面將重點介紹三種方式的實現。

一、web圖形化界麵灰度發布

因為我們項目用到了eureka注冊中心,所以選擇web圖形化界麵灰度發布比較合適。

1) 首先需要建立一個discovery控制台工程console, 埠為2222,控制台工程負責web圖形化界面請求的處理,運行console工程。

2) 下載discovery ui,地址:https://github.com/Nepxion/DiscoveryUI,運行discovery UI,埠為8090

3)瀏覽器中輸入localhost:8090,即可打開控制台,如下

注意:全鏈路灰度發布需要在「配置中心」下才可用。灰度發布配置中心,負責存儲全鏈路灰度發布規則,並將規則推送到各個微服務中。而配置中心可用nacos,redis等,Discovery 中提供了相應配置中心的插件包。

二、zuul網關過濾器灰度發布

通過網關過濾器傳遞Http Header的方式傳遞全鏈路灰度路由規則。下面代碼只適用於Zuul和Spring Cloud Gateway網關,Service微服務不需要加該方式。

三、業務參數在策略類中自定義灰度路由規則

通過策略方式自定義灰度路由規則。下面代碼既適用於Zuul和Spring Cloud Gateway網關,也適用於Service微服務,同時全鏈路中網關和服務都必須加該方式

上面說了具體灰度規則發布方式,那究竟怎麼定義灰度規則呢??

規則是基於XML或者Json為配置方式,存儲於本地文件或者遠程配置中心,可以通過遠程配置中心修改的方式達到規則動態化。其核心代碼參考discovery-plugin-framework以及它的擴展、discovery-plugin-config-center以及它的擴展和discovery-plugin-admin-center等,規則示例

XML示例(Json示例見discovery-springcloud-example-service下的rule.json)

黑/白名單的IP地址注冊的過濾規則

微服務啟動的時候,禁止指定的IP地址注冊到服務注冊發現中心。支持黑/白名單,白名單表示只允許指定IP地址前綴注冊,黑名單表示不允許指定IP地址前綴注冊。規則如何使用,見示例說明

最大注冊數的限制的過濾規則

微服務啟動的時候,一旦微服務集群下注冊的實例數目已經達到上限(可配置),將禁止後續的微服務進行注冊。規則如何使用,見示例說明

黑/白名單的IP地址發現的過濾規則

微服務啟動的時候,禁止指定的IP地址被服務發現。它使用的方式和「黑/白名單的IP地址注冊的過濾規則」一致

版本訪問的灰度發布規則

版本權重的灰度發布規則

全局版本權重的灰度發布規則

區域權重的灰度發布規則

全局區域權重的灰度發布規則

網關端全鏈路路由策略的灰度發布規則

注意 路由策略的入口有三個(以{"discovery-springcloud-example-a":"1.0", "discovery-springcloud-example-b":"1.0", "discovery-springcloud-example-c":"1.0;1.2"})為例:

其作用的優先順序為外界傳入>網關Filter指定>配置中心或者本地rule.xml配置

您可以根據自己需求,自由定義灰度發布規則,靈活實現微服務的灰度發布。

源碼位置:https://github.com/Nepxion/Discovery

⑩ 如何搭建spring boot

Helloworld使用傳統的springmvc,需要配置web.xml,applicationContext.xml,然後打包為war在tomcat中運行,而如果使用springboot,一切都變得簡單起來了。下面使用Maven來創建springboot的webapp工程pom.xml4.0.0org.springframeworkgs-spring-boot0.1.0org.springframework.bootspring-boot-starter-parent1.3.3.RELEASEorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtest1.8org.springframework.bootspring-boot-maven-;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@{@RequestMapping("/")publicStringindex(){return"GreetingsfromSpringBoot!";}}其中:@RestController表示使用springmvc來接收request請求@RequestMapping映射到主頁當請求返回的時候,是純文本,那是因為@RestController是由@Controller和@ResponseBody組成Application@{publicstaticvoidmain(String[]args){ApplicationContextctx=SpringApplication.run(Application.class,args);System.out.println("Let':");}}其中:@SpringBootApplication代表了其有四個註解組成:@Configuration,@EnableAutoConfiguration,@EnableWebMvc,@ComponentScan在SpringApplication.run中會去自動啟動tomcatrun方法返回上下文,在這個上下文中可以拿到所有的bean沒有一行配置代碼、也沒有web.xml。基於SpringBoot的應用在大多數情況下都不需要我們去顯式地聲明各類配置,而是將最常用的默認配置作為約定,在不聲明的情況下也能適應大多數的開發場景。總體而言springboot是對javawebapp開發的簡化單元測試@RunWith(SpringJUnit4ClassRunner.class)@(classes=MockServletContext.class)@{privateMockMvcmvc;@Beforepublicvoidbefore()throwsException{mvc=MockMvcBuilders.standaloneSetup(newHelloController()).build();}@Afterpublicvoidafter()throwsException{}/****Method:index()**/@TestpublicvoidtestIndex()throwsException{//TODO:Testgoesheremvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(content().string(equalTo("GreetingsfromSpringBoot!")));}}建立restfullweb伺服器接上,使用srpingboot建立web伺服器就非常簡單了,首先建立一個pojo類publicclassGreeting{privatefinallongid;privatefinalStringcontent;}然後使用control來handlehttp請求@{="Hello,%s!";privatefinalAtomicLongcounter=newAtomicLong();@RequestMapping("/greeting")publicGreetinggreeting(@RequestParam(value="name",defaultValue="World")Stringname){returnnewGreeting(counter.incrementAndGet(),String.format(template,name));}}其中:@RequestParam表明了參數要求,如果要必填則設置required=true返回是一個對象,會被自動轉換為json當我們訪問:greeting時候返回{"id":1,"content":"Hello,World!"}greeting?name=User時候返回{"id":2,"content":"Hello,User!"}資料庫訪問另一個非常常用的問題。在傳統開發中,我們需要配置:類路徑上添加數據訪問驅動實例化DataSource對象,指定url,username,password注入JdbcTemplate對象,如果使用Mybatis,還要配置框架信息下面一個例子講述用用springboot來代替。數據訪問層我們將使用SpringDataJPA和Hibernate(JPA的實現之一)。開始之前先介紹兩個概念springdata為了簡化程序與資料庫交互的代碼,spring提供了一個現成的層框架,spring家族提供的spring-data適用於關系型資料庫和nosql資料庫;例如SpringDataJPA,SpringDataHadoop,SpringDataMongoDB,SpringDataSolr等;具體的可以參考官網:.mysql.jdbc.Driverspring.datasource.password=xxx#SpecifytheDBMSspring.jpa.database=MYSQL#.jpa.show-sql=true#Hibernateddlauto(create,create-drop,update)spring.jpa.hibernate.ddl-auto=update#Namingstrategyspring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy#)spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect其中,hibernate的ddl-auto=update配置表名,資料庫的表和列會自動創建寫下實體類:@Entity@Table(name="student")publicclassStudent{@Id@GeneratedValue(strategy=GenerationType.AUTO)privatelongid;@NotNullprivateStringname;privateStringage;}@Entity,說明被這個註解修飾的類應該與一張資料庫表相對應,表的名稱可以由類名推斷,當然了,也可以明確配置,只要加上@Table(name="books")即可。需要特別注意,每個Entity類都應該有一個protected訪問級別的無參構造函數,用於給Hibernate提供初始化的入口。@Idand@GeneratedValue:@Id註解修飾的屬性應該作為表中的主鍵處理、@GeneratedValue修飾的屬性應該由資料庫自動生成,而不需要明確指定。@ManyToOne,@ManyToMany表明具體的數據存放在其他表中,在這個例子里,書和作者是多對一的關系,書和出版社是多對一的關系,因此book表中的author和publisher相當於數據表中的外鍵;並且在Publisher中通過@OneToMany(mapped="publisher")定義一個反向關聯(1——>n),表明book類中的publisher屬性與這里的books形成對應關系。@Repository用來表示訪問資料庫並操作數據的介面,同時它修飾的介面也可以被componentscan機制探測到並注冊為bean,這樣就可以在其他模塊中通過@Autowired織入。:@{ListfindByLastName(StringlastName);}詳細的可以看springjpa的具體介紹。最後使用:@{@AutowiredprivateStudentDao;@RequestMapping("/get-student-counts")@(){Liststudents=(List).findAll();returnString.format("%d",students.size());}}主要一點是:我在CustomerRepository實現中每天添加方法:findByLastName,@Autowired就會一直報錯。

熱點內容
喵喵試玩腳本 發布:2025-04-05 19:42:08 瀏覽:456
我的世界布吉島伺服器怎麼加材質包 發布:2025-04-05 19:32:27 瀏覽:594
ftp怎麼連接路由 發布:2025-04-05 19:20:52 瀏覽:232
手游腳本商城 發布:2025-04-05 19:08:23 瀏覽:799
摘星游戲腳本 發布:2025-04-05 18:49:51 瀏覽:590
c語言中k什麼意思 發布:2025-04-05 18:49:40 瀏覽:87
php在線編程 發布:2025-04-05 18:47:30 瀏覽:542
sqlserver運行 發布:2025-04-05 18:41:32 瀏覽:44
如何安卓遷移蘋果 發布:2025-04-05 18:35:03 瀏覽:577
c語言輸入處理 發布:2025-04-05 18:34:58 瀏覽:99