构建 config-server 9012 项目
pom 依赖
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.zk.springcloud.configgroupId>
<artifactId>springcloud-configartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloud-configname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Finchley.SR1spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
启动类
@SpringBootApplication
@EnableConfigServer
public class SpringcloudConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudConfigApplication.class, args);
}
}
配置文件
spring.application.name=config-server
server.port=9012
spring.cloud.config.server.git.uri=http://www.github.com/LJaer/zkTest.git
spring.cloud.config.server.git.search-paths=spring_cloud_in_action/config-repo
spring.cloud.config.server.git.username=username
spring.cloud.config.server.git.password=123456
spring_cloud_in_action/config-repo 目录下创建四个文件
didispace.properties
didispace-dev.properties
didispace-test.properties
didispace-prod.properties
文件内容分别为
from=git-default-1.0
from=git-dev-1.0
from=git-test-1.0
from=git-prod-1.0
访问:http://localhost:9012/didispace/prod/master 返回
{"name":"didispace","profiles":["prod"],"label":"master","version":"921fa4b99b5b35d7aa48a4a1ab420895463c6e58","state":null,"propertySources":[{"name":"http://hcgit.hengchang6.com/zhangkai170308/zkTest.git/spring_cloud_in_action/config-repo/didispace-prod.properties","source":{"from":"git-prod-1.0"}},{"name":"http://hcgit.hengchang6.com/zhangkai170308/zkTest.git/spring_cloud_in_action/config-repo/didispace.properties","source":{"from":"git-default-1.0"}}]}
访问:http://localhost:9012/didispace-prod.properties 返回
from: git-prod-1.0
访问: http://localhost:9012/master/didispace-prod.properties 返回
from: git-prod-1.0
创建 config-client 9013 项目
pom 依赖
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.zk.springcloud.configgroupId>
<artifactId>springcloud-config-clientartifactId>
<version>0.0.1-SNAPSHOTversion>
<packaging>jarpackaging>
<name>springcloud-config-clientname>
<description>Demo project for Spring Bootdescription>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.5.RELEASEversion>
<relativePath/>
parent>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
<java.version>1.8java.version>
<spring-cloud.version>Finchley.SR1spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
启动类
@SpringBootApplication
public class SpringcloudConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudConfigClientApplication.class, args);
}
}
配置文件需要命名为:bootstrap.properties
spring.application.name=didispace
server.port=9013
spring.cloud.config.profile=dev
spring.cloud.config.label=master
spring.cloud.config.uri=http://localhost:9012/
访问:http://localhost:9013/from 获得 git-dev-1.0
使用本地仓库,脱离 Git 服务端
spring.cloud.config.server.git.uri=file://${user.home}/config-repo
${user.home} 代表当前用户的所属目录
指定一个固定的位置存储
spring.cloud.config.server.git.basedir=
spring.cloud.config.server.svn.basedir=
加载 config 9012 项目里
spring.cloud.config.server.overrides.name=didi
spring.cloud.config.server.overrides.from=shanghai
访问 http://localhost:9013/from 返回 shanghai
config 9012 项目里添加 Spring Security 依赖
org.springframework.boot
spring-boot-starter-security
启动后打印,生成随机秘密吗
2018-10-10 10:59:52.727 INFO 53668 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: e1815bf6-2207-4b48-8dcc-219a81c6c2aa
使用自定义密码
spring.security.user.name=user
spring.security.user.password=123456
客户端 config-client 配置如下
spring.cloud.config.username=user
spring.cloud.config.password=123456
config-server 9012 项目改造
添加依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置文件
eureka.client.service-url.defaultZone=http://localhost:9001/eureka/,http://localhost:9004/eureka/
启动类添加注解 @EnableDiscoveryClient
访问 http://localhost:9001/ 查看到 CONFIG-SERVER 已注册到 Eureka
config-client 9013 项目改造
添加依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
配置文件,在 bootstrap.properties
eureka.client.service-url.defaultZone=http://localhost:9001/eureka/,http://localhost:9004/eureka/
#直接访问配置中心
#spring.cloud.config.profile=dev
#spring.cloud.config.label=master
#spring.cloud.config.uri=http://localhost:9012/
eureka.client.service-url.defaultZone=http://localhost:9001/eureka/,http://localhost:9004/eureka/
#通过注册中心访问配置中心
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.service-id=CONFIG-SERVER
启动类添加注解 @EnableDiscoveryClient
访问 http://localhost:9001/ 查看到 DIDISPACE 已注册到 Eureka
访问 http://localhost:9013/from 可以获得 shanghai
当 config-server 9012 服务关闭下,config-client 失败快速响应
在 config-client 9013 配置文件 bootstrap.properties 添加如下配置
spring.cloud.config.fail-fast=true
在未配置该属性之前,不启动 config-server 9012 ,直接启动 config-client 9013 打印一堆其他加载内容和报错
2018-10-10 15:32:25.796 ERROR 52624 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.testController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'from' in value "${from}"
加上该属性后,重试,加载内容变少,快速响应失败
2018-10-10 15:34:39.677 ERROR 35584 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Could not locate PropertySource and the fail fast property is set, failing
重试
spring.cloud.config.fail-fast=true
该配置开启的前提下,客户端 config-client 9013 添加如下依赖
org.springframework.retry
spring-retry
org.springframework.boot
spring-boot-starter-aop
重启 config-client 9013 连接 config-server 失败后,会进行重试
可以自定义
#重试间隔时间,默认为 1000 毫秒
spring.cloud.config.retry.multiplier=
#下一次间隔的乘数,默认1.1
spring.cloud.config.retry.initial-interval=
#最大间隔时间,默认 2000 毫秒
spring.cloud.config.retry.max-interval=
#最大尝试次数,默认6
spring.cloud.config.retry.max-attempts=
Spring Boot 2.0 迁移指南
Spring Cloud系列(二) 应用监控与管理Actuator
config-server 9012 配置文件注释,并且开启 actuator 下其他路径
#spring.cloud.config.server.overrides.name=didi
#spring.cloud.config.server.overrides.from=shanghai
management.endpoints.web.exposure.include=*
添加 pom 依赖
org.springframework.boot
spring-boot-starter-actuator
2.0.2.RELEASE
添加 @RefreshScope 注解
@RestController
@RefreshScope
public class TestController {
@Value("${from}")
private String from;
@GetMapping("/from")
public String from(){
return this.from;
}
}
访问 http://localhost:9013/from 获得 git-default-1.0
修改 git 上 git-default-1.0 为 git-default-2.0 ,再访问 http://localhost:9013/from 获得 git-default-1.0
POST 方式访问 http://localhost:9013/actuator/refresh 会返回 [“config.client.version”,“from”]
访问 http://localhost:9013/from 获得 git-default-2.0