天天看點

ssm項目day7

1.maven建立springboot工程

1.pom裡面導springboot依賴

2.主啟動類上标@SpringBootApplication注解,該類中main方法裡進行

SpringApplication.run

3.完成,如有需要另加yml或者properties配置檔案

[email protected]注解的含義:

@SpringBootConfiguration:約等于spring中的@Configuration

@EnableAutoConfiguration

@ComponentScan:包掃描,預設約定掃描啟動類所在包下的所有類

如果需要改掃描位置,可以在啟動類上重寫@ComponentScan注解,但此時約定掃描規則會失效

3。springboot版本仲裁

在springboot項目中我們繼承的spring-boot-starter-parent項目,有父項目,在它的父項目pom檔案中,已經完全規定好了需要用到的依賴,經過嚴格測試後的版本,是以,在我們的pom檔案中,引用已經規定好的依賴不需要再聲明版本,避免版本問題。

4.springboot配置檔案

1./main/resources目錄下

2.application.properties和application.yml二選一

注意:springboot實際上是有自動配置的,我們隻不過是在修改自動配置而已

5.yml文法需要注意的地方

冒号後面必須有一個空格!!!

yml對key value大小寫敏感

在yml中寫map

分為正常寫法和行内寫法

在yml中寫數組

分為正常寫法和行内寫法

略,上網找找有筆記的

6.在java類中使用yml配置的資料

使用**@Component**将要使用屬性的類加入到容器中

@ConfigurationProperties( prefix = “student”)

使用@ConfigurationProperties表示将配置檔案中的對應屬性的值加入到元件之中

prefix限定了配置檔案中屬性的範圍,當我們指定了student之後,隻有student下面的屬性會被注入

在pom檔案中加入spring-boot-configuration-processor依賴(幫助在編寫yml的時候給提示)

然後就可以通過yml的配置,填充類中的屬性

7.使用@Value注解讀取配置檔案

@Value注解能夠更加簡單的讀取yml配置中的值,但是僅限該值為簡單類型資料

@Value(“${xxx.xxx.xxx}”)

8.修改springboot日志級别為debug

全局修改為debug(這個會列印海量的日志,不推薦)

logging:

level:

root: debug

特定包修改為debug

logging:

level:

包名: debug

一般是mybatis查驗SQL語句的時候使用

8。springboot的一些注解

@Configuration注解:同spring中該注解的作用,在類名上加上之後,該類成為一個配置類,加載在這個類中的配置可以取代xml檔案。

@Bean注解:相當于spring中的bean标簽,把一個類加入到ioc容器中

@Import注解:也可以更便捷的将一個類加入到ioc容器中

@Import(EmployeeHandler.class)

@Conditional注解:一個類在滿足特定條件後才加入IOC容器(常應用于各種AutoConfiguration類中)

@ComponentScan:包掃描

@AutoConfigurationPackage注解:指定自動化配置的包

9.springboot工作原理

1.讀取spring.factories檔案,在spring-boot-autoconfigure包下,讀取值自動加載配置類。

2.加載XxxProperties類

3.根據@ConditionalXxx注解決定加載哪些元件

ssm項目day7
ssm項目day7

10.springcloud核心

基于http協定的,dubbo是基于RPC的,這是最本質的不同。

用到的元件:

注冊中心:Eureka

用戶端負載均衡:Ribbon

聲明式遠端方法調用:Feign

服務的降級、熔斷:Hystrix

網關:Zuul

consumer:服務消費者,就是調用provider的人

provider:服務提供者,就是給consumer提供服務的人

下圖是springcloud各個元件的一個大緻工作流程

ssm項目day7

springcloud是工作在springboot的基礎上的

11.Eureka服務的建立

Eureka服務

1.在pom.xml中導入Eureka依賴

依賴是eureka-server

2.在主啟動類上标注@EnableEurekaServer

3.配置類配置相關資訊(具體略)server資訊和eureka資訊

4.通過springboot啟動Eureka伺服器端

需要加入Eureka的Provider子產品

1.在pom.xml中導入Eureka依賴

依賴是eureka-client

2.在配置檔案中配置(具體略)eureka資訊,應用名稱資訊

以後在springcloud中開發,每一個應用都要設定應用名稱

3.在主啟動類上加入@EnableEurekaClient(springcloud高版本好像可以省略該步)

consumer通過Eureka訂閱Provider

1.在pom.xml中導入Eureka依賴

依賴是eureka-client和Ribbon

2.在配置檔案中配置(具體略)eureka資訊

idea中同時啟動多個不同端口的同一微服務執行個體,開啟微服務叢集

run-edit-configurations 在配置裡勾上Allow parallel run

注意 微服務名稱必須相同才會被認定為屬于同一個叢集

12.Ribbon

用戶端的負載均衡,根據微服務的名稱通路微服務的具體執行個體,在導入feign的同時會自動導入。

大緻工作原理:

首先consumer請求會到Ribbon處,Ribbon根據微服務的名稱,去eureka找該服務叢集中執行個體的具體位址和端口号,然後内部決定調用該叢集中的哪一個執行個體

13.Feign

Feign是聲明式方法遠端調用的子產品。

0.導入依賴

1.consumer子產品要主啟動類上開啟@EnableFeignClients

然後直接裝配common子產品中的接口類即可(例如XxxService)

2.common子產品需要定義provider子產品要實作的接口,并且标注

@FeignClients(“provider微服務名稱”)

3.provider實作common中定義的接口(provider和common中方法的聲明必須一緻)

Feign需要傳參的情況下,provider也要寫對應的注解,最好與consumer的handler中的方法上的一緻,如@RequestParam等

14.Hystrix

服務雪崩 某個微服務出問題之後,由于未設定處理辦法(熔斷、降級),使得大量其他服務無法調用該服務進而導緻整條服務鍊無法繼續運作,被稱為服務雪崩。

provider提供熔斷方法:

0.導入依賴

1.在provider主啟動類上加注解@EnableCircuitBreaker

2.在需要提供熔斷方法的handler方法上标注解@HystrixCommand(fallbackMethod=“xxxMethod”)

這就指定了,該方法如果出問題,去找xxxMethod處理

降級方法

0.在common工程(provider和consumer都依賴的那個工程)中導入hystrix依賴。

1.在包掃描的範圍下寫自己實作的FallbackFactory,類上加@Component标簽(必須加入IOC容器否則檢查不到)。在裡面的create方法中,new一個service,該service就是consumer調用provider的那個service

ssm項目day7

2.在接口上FeignClient注解括号中,加入fallbackFactory=“fallback工廠名”

3.在consumer工程中:yml中開啟Hystrix(enable=true)

Hystrix也能做監控

15.zuul網關

用戶端直接與各種微服務通信會有諸多不友善

1.跨域請求,在浏覽器上會出現諸多阻礙

2.用戶端多次請求,增加用戶端複雜性

3.認證複雜,每一個微服務都需要一個認證

4.難以重構,如果微服務架構做出調整,用戶端重構困難

5.某些微服務可能還會帶有其他協定

Zuul包含了請求的路由和過濾兩個最主要的功能

ssm項目day7

使用方法:

1.建立zuul工程,導入相關依賴,主啟動類加注解@EnableZuulProxy

通路網址如下

ssm項目day7

如何給微服務起别名,防止暴露微服務名稱

ssm項目day7

然後忽略微服務名稱

ssm項目day7

給通路路徑加字首

ssm項目day7

位址:如果server又配了ContextPath,那麼通路網址應該是

ip:端口号/${ContextPath}/{prefix}/微服務别名/接口網址

zuulfilter

可以在zuul工程中寫XxxZuulFilter

實際上如果把多個微服務整合起來看成一個大項目的話,那麼zuulfilter就是整個大項目的攔截器。

在每個微服務的内部也可以寫自己專有的攔截器,而在zuul項目中寫整個大項目用到的攔截器。