springcloud學習


1.創建一個maven主工程,在其pom文件中引入依賴,spring boot 版本為2.0.x以上,spring cloud版本為Greenwich.SR。這個pom文件作為父pom文件,起到依賴版本控制的作用,其它module工程繼承該<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>springdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springdemo</name> 
    <description>Demo project for Spring Boot</description>
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
      <java.version>1.8</java.version>
      <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
  </properties>
   <modules> 
      <module>eureka-server</module>
      <module>service-hi</module>
   </modules>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>  
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
<!-- dependencies與dependencyManagement的區別 主項目dependencies下的依賴,即使子項目不寫該依賴項,子項目仍會全部繼承,而主項目dependencyManagement下的依賴則需要子項目顯示引入該依賴 為了項目的正常運行,必須讓所有子模塊的依賴項使用統一的版本號。
比如在此項目中,有一個子模塊eureka-server, 在主項目中設置dependencyManagement元素,通過它管理eureka-server的依賴版本,在eureka-server中聲明該元素下的依賴時可以不標注版本號, maven工程會向上級查詢該依賴的版本號。
而如果eureka-server依賴中聲明了版本號,則eureka-server會使用該聲明的版本號 -->
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type> <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

 

創建兩個model工程,一個model工程為服務注冊中心,即Eureka Server,另一個作為Eureka Client

注冊中心eureka server

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springdemo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>eurkea-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-server</name>
	<description>Demo project for Spring Boot</description>


	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

	</dependencies>


</project>

 eureka-server的yml配置文件(注意:1.application.yml采用的注釋符號是#而不是//。2.縮進必須使用空格,而不是tab鍵。3.冒號后面必須有空格。

server: port: 8761
eureka:
  instance:
    hostname: localhost
  client:
  #通過eureka.client.registerWithEureka:false和fetchRegistry:false來表明自己是一個eureka server
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
  application:
    name: eureka-server

  eureka-server入口類的注解:表示啟動一個服務注冊中心

@SpringBootApplication
@EnableEurekaServer
public class EurkaServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurkaServerApplication.class, args);
	}

}

   配置成功之后啟動eureka-server項目,訪問localhost:8761會出現如下界面

 

 創建eureka-client(服務提供者)

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.holley</groupId>
	<artifactId>eureka-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>eureka-client</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springdemo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

  application.yml文件(需要指明spring.application.name,這個很重要,這在以后的服務與服務之間相互調用一般都是根據這個name )

server:
   port: 8762
spring:
    application:
        name: eureka-client
eureka:
  client:
    serviceUrl:
        defaultZone: http://localhost:8761/eureka/

 子模塊入口

package com.holley.eurekaclient;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaClientApplication {
     // 通過注解@EnableEurekaClient 表明自己是一個eurekaclient.

	public static void main(String[] args) {
		SpringApplication.run(EurekaClientApplication.class, args);
	}

	@Value("${server.port}")
	String port;

	@RequestMapping("/hi")
	public String home(@RequestParam(value = "name",defaultValue = "holley")String name){
		return "hi,"+name+",i come from port:"+port;
	}
}

  訪問地址:http://localhost:8762/hi?name=

 

 負載均衡ribbon+restTemplate和feign(啟動eureka-client多個實例,只改變端口值,此時就相當於一個小的集群,然后使用ribbon或者feign(feign默認集成了ribbon)訪問eureka-client的接口,會隨機訪問eureka-client實例)

首先創建一個springboot的工程,取名為service-ribon,其pom文件內容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>ribbondemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>ribbondemo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  配置文件如下

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8764
spring:
  application:
    name: service-ribbon

  在啟動類中,通過EnableDiscoveryClient向服務注冊中心注冊,並且向程序的ioc注入一個bean:restTemplate;並且通過@LoadBalances注解表明這個restTemplate開啟負載均衡的功能

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class RibbondemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(RibbondemoApplication.class, args);
	}

	@Bean
	@LoadBalanced
	RestTemplate restTemplate(){
		return new RestTemplate();
	}
}

  控制層和普通的springboot的控制層一樣,service層需要調用服務的接口

@Service
public class HelloService {
    @Autowired
    RestTemplate restTemplate;

    public String hiService(String name){
        // 通過服務名稱和uri進行調用
        return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
    }
}     

也可以直接在主項目下創建一個module項目作為ribbon,此時只有pom文件和單獨的工程項目不同,其他代碼一致

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springdemo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>ribbon</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>ribbon</name>
	<description>Demo project for Spring Boot</description>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>


</project>

  使用feign實現負載均衡(如果依賴報錯,注意版本號是否正確,或者springboot的版本與springcloud的版本是否兼容)

創建一個新的springboot子模塊,取名為service-feign,其pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springdemo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>service-feign</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>service-feign</name>
	<description>Demo project for Spring Boot</description>


	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

	</dependencies>

</project>

  配置參數如下:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

server:
  port: 8765
spring:
  application:
    name: service-feign

  啟動類上需要添加@EnableFeignClients注解開啟Feign的功能

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableDiscoveryClient
public class ServiceFeignApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServiceFeignApplication.class, args);
	}

}

  定義一個feign接口,通過@FeignClient("服務名")來指定調用哪個服務

@FeignClient(value = "eureka-client")
@Component
public interface Hiservice {

    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String hi(@RequestParam(value = "name") String name);
}

  在web的controller層,對外暴露一個“/hi”的api接口,通過上面定義的接口來調用服務

@RestController
public class HiController {

    @Autowired
    Hiservice hiservice;

    @GetMapping(value = "/hi")
    public String sayHi(@RequestParam String name) {
        return hiservice.hi( name );
    }
}

  啟動程序,多次訪問http://localhost:8765/hi?name=forezp,瀏覽器交替顯示:

 斷路器(如果較底層的服務出現故障,當對此服務的調用的不可用達到一個閾值(如:Hystric是5秒20次)斷路器將會被打開)

在之前的ribbon模塊的pom文件中添加如下依賴

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  </dependency>

  在啟動類中添加注解@EnableHystrix注解開啟Hystrix

 

HelloService類中添加如下方法

@HystrixCommand(fallbackMethod = "error")
    public String hystrixTextService(String name){
        return restTemplate.getForObject("http://eureka-client/test?name="+name,String.class);
    }
    /**
      * @Author holley
      * @Description 斷路器回調函數
      * @Date 2019/9/16 17:40
      * @Param [name]
      * @return java.lang.String
      */
    public String error(String name){
        return "hi,"+name+",sorry,error!";
    }

  在controller層添加調用接口

@RequestMapping(value = "/test",method = RequestMethod.GET)
    public String hystrixTest(@RequestParam("name")String name){
        return helloService.hystrixTextService(name);
    }

  如果此時http://eureka-client/test?name=zhangsan不可訪問,則結果如下:

 

 feign中是自帶斷路器的,但是在D版本之后默認是關閉,需要在配置文件中打開

feign:
  hystrix:
    enabled: true

  在service層,只需要在FeignClient注解中添加fallback的指定類即可

@FeignClient(value = "eureka-client",fallback = FeignHystrixTest.class)
@Component
public interface Hiservice {

    @RequestMapping(value = "/hi",method = RequestMethod.GET)
    String hi(@RequestParam(value = "name") String name);
}

  同時新建的fallback指定類必須要實現Hiservice接口,並注入到ioc容器中,代碼如下:

@Component
public class FeignHystrixTest implements Hiservice{
    @Override
    public String hi(String name) {
        return "對不起,服務不可用";
    }
}

  

 zuul的主要功能是路由轉發和過濾器

其pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springdemo</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>zuuldemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>zuuldemo</name>
	<description>Demo project for Spring Boot</description>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
		</dependency>
	</dependencies>

</project>

  啟動類上需要添加@EnableZuulProxy注解,開啟zuul功能

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuuldemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(ZuuldemoApplication.class, args);
	}

}

  配置文件如下:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 8769
spring:
  application:
    name: service-zuul
#以/api-a/ 開頭的請求都轉發給service-ribbon服務;以/api-b/開頭的請求都轉發給service-feign服務; zuul: routes: api-a: path: /api-a/** serviceId: service-ribbon api-b: path: /api-b/** serviceId: service-feign

  zuul還能進行過濾,做一些安全驗證

package com.holley.servicezuul.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author Holley
 * @Description 請輸入一句話進行描述
 * @create 2019-09-17 16:55
 **/
@Component
public class MyFilter extends ZuulFilter{

    private static Logger log = LoggerFactory.getLogger(MyFilter.class);

    /** filterType:返回一個字符串代表過濾器的類型,在zuul中定義了四種不同生命周期的過濾器類型
     * pre:路由之前
     * routing:路由之時
     * post:路由之后
     * error:發送錯誤調用
     */
    @Override
    public String filterType() {
        return "pre";
    }

    /**
     * 過濾的順序
     */
    @Override
    public int filterOrder() {
        return 0;
    }

    /**
     * 這里可寫邏輯判斷,判斷是否過濾,true表示過濾,false表示不過濾
     */
    @Override
    public boolean shouldFilter() {
        return true;
    }
    /**
      * 過濾器的具體邏輯。可用很復雜,包括查sql,nosql去判斷該請求到底有沒有權限訪問
      */
    @Override
    public Object run() throws ZuulException {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        log.info(String.format("%s >>> %s",request.getMethod(),request.getRequestURL().toString()));
        Object accessToken = request.getParameter("token");
        if(accessToken == null){
            log.warn("token is empty");
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            try{
                ctx.getResponse().getWriter().write("token is empty");
            }catch (Exception e){
                e.printStackTrace();
            }
            return null;
        }
        log.info("ok");
        return null;
    }
}

  此時訪問http://localhost:8769/api-b/hi?name=,token為空時會直接返回錯誤信息

 spring cliud config(分布式配置中心組件) 方便服務配置文件統一管理,實時更新。在spring cloud config組件中,分為兩個角色,一個是config server,一個是config client

新建一個主工程,pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>springcloudconfig</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springcloudconfig</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
	</properties>

    <modules>
        <module>config-server</module>
        <module>config-client</module>
    </modules>


    <dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  

config server

pom文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springcloudconfig</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>config-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>config-server</name>
	<description>Demo project for Spring Boot</description>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-config-server</artifactId>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  配置文件(application.properties)如下

spring.application.name=config-server
#默認是git,也可以使用本地配置,或者subversion(svn),native(本地)
spring.application.profiles.active=git
server.port=8888
#配置git倉庫地址(最后不需要帶/,否則會出現:No custom http config found for URL: XXX)
spring.cloud.config.server.git.uri=https://github.com/zhanghouli/hello-world.git
#git倉庫地址下的相對搜索地址(可用使用通配符),可以配置多個,用,分割。可以{application}實現按應用查配置
spring.cloud.config.server.git.search-paths=application
#配置倉庫的分支
spring.cloud.config.label=master
#訪問git倉庫的用戶名(如果Git倉庫為公開倉庫,可以不填寫用戶名和密碼,如果是私有倉庫需要填寫)
spring.cloud.config.server.git.username=
#訪問git倉庫的用戶密碼
spring.cloud.config.server.git.password=

  此外需要在啟動類上添加@EnableConfigServer注解

 

 /{application}/{profile}[/{label}]
[/{label}]/{application}-{profile}{.yml|.properties|.json}

規則簡單說明:{application}=配置消費方應用名稱(即:config client的項目名,通俗講:就是誰用這個配置就是誰的名字),{profile}=配置環境(如:dev開發環境,test測試環境,prod生產環境),{label}=倉庫分支名(git或svn方式指定,native本地方式無需指定),.yml|.properties|.json表示指定的響應返回格式,{}表示必需,[]表示可選,|表示或的關系,例如本例中訪問:http://localhost:8888/config-server/prod

 

config client

pom文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.holley</groupId>
		<artifactId>springcloudconfig</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<groupId>com.holley</groupId>
	<artifactId>config-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>config-client</name>
	<description>Demo project for Spring Boot</description>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  配置文件(bootstrap.properties)如下

spring.application.name=config-client
#指明遠程倉庫的分支
spring.cloud.config.label=master
#dev開發環境  test測試環境   pro正式環境
spring.cloud.config.profile=dev
#指明配置服務中心的網址
spring.cloud.config.uri=http://localhost:8888/
server.port=8881

 在啟動類寫一個接口,讀取配置文件中holley變量的值

@SpringBootApplication
@RestController
public class ConfigClientApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConfigClientApplication.class, args);
	}

	@Value("${holley}")
	String holley;

	/**
	 * 返回從配置中心讀取的holley變量的值
	 * @return
	 */
	@RequestMapping(value = "/hi")
	public String hi(){
		return holley;
	}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM