springCloud springboot基礎

**

常用註解

**

springBoot
@ComponentScan 指定一個包名 掃描這個包和子包
		不指定的話就進行默認掃描 :自動掃描主程序所在的包和子包  所以我們一般直接定義主程序所在的包的子包
@Controller 聲明對象是控制器程序
@RestCOntroller是組合註解主要用於以數據返回的微服務中 相當於  @Controller和@Responsbody  因爲有這兩個作爲原註解
@EnableTransactionManagement 啓動事務管理器   @Transcational註解就可以起作用了
@MapperScan 掃描DAO 創建代理對象 進而注入service用的		

springCloud
@Mapper註解寫在你的Mapper映射接口上面
@SpringBootApplication寫在主程序上面
@Configuration 寫在配置類上面    @Bean寫在配置類中的返回新的對象的方法上面
@EnableEurekaServer把當前微服務標記爲Eureka註冊中心 接收其他微服務的註冊
@EnableEurekaClient註冊該微服務到Eureka中
@LoadBalanced該註解寫在配置RestTemplate的配置類方法上來啓動ribbon負載均衡
@EnableFeignClients寫在主程序上來支持feign
@HystrixCommand(fallbackMethod=“你的方法”)			@EnableCircuitBreaker //啓用對Hystrix熔斷機制的支持
@FeignClient(value="服務名",fallbackFactory=實現FallbackFactory的類.class) 實現服務降級
@EnableHystrixDashboard 加在主程序上啓動服務監控
@FeignClient(value=“服務名”)寫在接口上 來調用遠程服務
@EnableZuulProxy寫在主程序上啓動zuul路由訪問功能

**

SpringApplication源碼分析

**

我們在啓動SpringBoot的時候調用了SpringApplication.run(AtCrowdfundingApplication.class,args);

(1)這個方法的作用其實是在底層創建了一個對象    new SpringApplication(object數組).run(args);  
			SpringApplication springApplication = new SpringApplication(new Object[]{AtCrowdfundingApplication.class}); 
 			springApplication.run(args);所以我們可以用這句代碼替代上面的代碼
 			好處就是可以在springApplication.setxxx中自定義設置
 (2)SpringApplication構造器:
 		調用了initialize()方法  把傳入的數組轉換成集合再轉換成linkedHashSet中
 	1	deduceWebEnvironment()判斷是否引入了web模塊是的話返回true
 		判斷Servlet ConfigurableWebApplicationContext兩個類是否存在 是就是web環境 纔會做web環境所需要的配置
 	2  setInitializer:拿6個工廠對象做底層實例對象的管理存放在initializers(LIST集合)裏面 傳入的參數是ApplicationContextInitializer.class

在這裏插入圖片描述

 		ApplicationContext 就是我們的IOC容器 在初始化的時候 需要我們工廠做一些bean對象生命週期的管理
	
		首先獲取當前線程類的應用類加載器 然後獲取工廠類名進而創建工廠類對象
		通過反射拿ApplicationContextInitializer的類名
		從jar包中找到META-INF/spring.factories並且加載成properties  找鍵是ApplicationContextInitializer的值 就是上圖中的6個類名
		通過反射創建對象
 	3 setListener把監聽器放在listeners(list集合)中 過程原理和上面是一樣的

在這裏插入圖片描述

	4 deduceMainApplicationClass() 判斷主程序類是哪一個類
		首先獲取異常棧 找到main方法 就可以找到主程序類並放回	 
	
(3)run方法 使用構造器初始化的成員變量
		通過反射創建IOC容器並且進行初始化

**

SpringBootApplication註解

**

有很多原註解  
 @Target
 @Retention
 @Documented
 @Inherited
 @springBootConfiguration   這個註解又有一個@Configuration 說明兩個都可以用來聲明配置類
 @EnableAutoCOnfiguration很重要 : @AUtoConfigurationPackage啓動自動掃描包
 								  @Import(EnableAutoConfigurationImportSelector.class) 使用條件註解@Conditional...判斷你的運行環境(你引入的starter)來配置你需要的

**

SpringBOOT整合mybatis

需要application.yml配置文件
**

---  
spring: 
  datasource:
    name: mydb
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://127.0.0.1:3306/cc
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
mybatis:   
  mapper-locations: classpath*:/mybatis/mapper-*.xml
  type-aliases-package: com.xx.**.bean

---表示分隔符
mybatis配置的是mapepr配置文件 可有可無 沒有的話就直接在dao接口中寫sql註解  簡單的sql可以這樣寫 複雜的例如動態sql可以用配置文件寫

**

SpringBOOT熱部署

**

只需要引入jar包
 <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional><!-- 這個需要爲 true 熱部署纔有效-->
 </dependency>
項目出現了devtools就說明可以支持熱部署了

**

SpringBOOT動態設置端口號

組合配置
**

創建application-test.properties文件 寫自己所要的端口號碼
在run as  configuration配置中 program arguments填寫參數
 --spring.profiles.active=test     test名字可以自己起  就可以關聯了

原理是利用ConfigFileApplicationLIstener監聽器監聽有沒有spring.profiles.active參數 有就會通過這個參數啓動配置文件
原本application.properties中的配置還是可以起作用的 application-test.properties裏面有的配置就會覆蓋掉application.properties的

**

SpringBoot集羣

**

使用內置的tomcat配置集羣:
server.address=127.0.0.1   //只有本機可以直接訪問tomcat
server.tomcat.remote-ip-header=x-forwarded-for
server.tomcat.protocol-header=x-forwarded-proto
server.tomcat.port-header=X-Forwarded-Port
server.use-forward-headers=true

測試:
兩個項目 兩個配置文件 兩個端口號 啓動就行 使用nginx進行負載均衡


使用外置的tomcat配置集羣:
	更改pom文件: <packaging>jar</packaging>  到  <packaging>war</packaging>
	把tomcat模塊的依賴類庫設置成provided範圍 因爲我們使用的外部的tomcat 在部署的時候不需要內置的tomcat
	將當前Application啓動類繼承SpringBootServletInitializer, 並重寫方法configure 此時就不需要原本的main方法了
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
	        builder.sources(Application.class);// Application爲啓動類
	        return super.configure(builder);
	} 
打成war包 放在tomcat文件夾的webapps下 名字是ROOT.war 運行的時候就會形成ROOT文件夾

**

springBoot集成redis

做session共享
**

放入依賴的jar包後 會有RedisAutoConfiguration配置類就會啓動

在這裏插入圖片描述

需要增加一個集成配置類 來啓動
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
}

當然要實現session共享 pojo對象要序列化  
這樣就成功了  在session中存儲數據的時候就會存儲到redis中

**

springBoot集成健康監控

監控項目狀態
**

引入相關配置後 在http://ip:port/health查看健康狀態
up表示正在運行

可以在項目yml中間中定義:

在這裏插入圖片描述

就可以在info資源路徑中拿到: 項目名字 父工程描述信息 版本 springboot父版本

還有很多其他路徑~

**

Spring Cloud

**

(1)註冊中心  倒入Eurka Server
		在主程序上加 @EnableEurekaServer 
		propertites配置
		spring.application.name=eureka-server
		server.port=1001
		eureka.instance.hostname=127.0.0.1
		eureka.client.register-with-eureka=false
		eureka.client.fetch-registry=false
		eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
		
		服務項目要導入 Eurka Discovery 
		主程序要加入@EnableDIscoveryClient
		spring.application.name=eureka-member-service
		server.port=2001
		eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1001/eureka/

		客戶端項目 要導入 Eurka Discovery Feign
		主程序  @EnableDIscoveryClient   @EnableFeignClients啓動feign的方式進行遠程調用
		spring.application.name=eureka-member-client
		server.port=80
		eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
		service接口裏的方法要跟遠程的controller裏的方法聲明保持一樣  加上@FeignClient(遠程服務名字 可以在註冊中心或者配置文件中找到)

(2)ribbon負載均衡 在客戶端做 在我們客戶端找到多個遠程服務的時候就會使用ribbon進行輪詢     
		 nginx是在服務器端做負載均衡~ Feign中已經內置了ribbon所以不需要額外的操作 但是redis要自己搭建一個服務器
(3)Hystrix 進行系統的容錯
			熔斷器加在web端  主程序中加@EnableHystrix
			增加熔斷方法 @HystrixCommand(fallbackMethod="你的熔斷方法")
發佈了66 篇原創文章 · 獲贊 44 · 訪問量 7308
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章