在微服务如果使用传统的方式管理配置文件,配置文件管理起来会非常负责如果生产环境配置文件,可能需要发生改变的时候,传统方式会重新打war包,重新读取配置信息在JVM内存
在微服务当中使用同一个服务器管理所有服务配置文件信息,能够实现后台可管理,当服务器正在运行的时侯,
如果配置文件需要发生改变,可以实现不需要重启服务器实时更改配置文件信息
SpringCloud把微服务所有的解决
都做了整合(全家桶)
阿波罗 → 携程写的分布式配置中心有图形界面可管理配置文件信息配置文件信息存放在数据库里面
SpringCloud Config → 没有后合可管理分布式配置中心配置文件信息存放在版本控制器里面(git[svn])
使用Zookeeper→ 实现分布式配置中心 持久节点信息+事件通知
热部署其实底层还是会重启服务器不适合于生产环境只适合于本地开发测试
[外链图片转存失败(img-6PM37flp-1568775721508)(images/1568708489155.png)]
持久化存储配置文件信息 采用码云
以大分类 项目进行区分
dev
— 开发环境
sit
— 测试环境
pre
— 预生产环境
prd
— 准生产环境
服务名称-环境.文件类型
如: member-dev.properties
在gitee(码云)上创建项目 我的为mayi_config
码云上新建文件夹 mayiconfig 注意该文件夹取名正常该为项目的名称
文件夹内新增两个配置文件分别为
test-configClient-prd.properties
itmayieduinfo=prd.itmayiedu.com
test-configClient-prd.properties
itmayieduinfo=prd.itmayiedu.com
最终结构为:
[外链图片转存失败(img-vJlFpMDz-1568775721509)(images/1568712980517.png)]
创建项目名称为: springboot2.0-config_server
添加maven依赖 如下
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.1.RELEASEversion>
parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.M7version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-serverartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
<repositories>
<repository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/libs-milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
application.yml配置
###服务注册到eureka地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
spring:
application:
####注册应用名称
name: config-server
cloud:
config:
server:
git:
### config-server读取git环境地址
uri: https://gitee.com/bd2star_zxh/mayi_config.git
####搜索目录
search-paths:
- mayiconfig
####读取分支
label: master
####端口号
server:
port: 8888
创建SpringBoot启动类
package com.itmayiedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
// @EnableConfigServer表示开启 configServer服务器端
@SpringBootApplication
@EnableEurekaClient
@EnableConfigServer
public class AppConfigServer {
public static void main(String[] args) {
SpringApplication.run(AppConfigServer.class, args);
}
}
启动项目(先启动Eureka注册中心、再启动该项目)
查看Eureka中服务是否注册成功 如下
[外链图片转存失败(img-7jGmQZ46-1568775721509)(images/1568713252043.png)]
访问git上的配置文件 路径为
http://localhost:8888/test-configClient-prd.properties
http://localhost:8888/test-configClient-prd.properties
返回信息如下
[外链图片转存失败(img-6qOiPxvj-1568775721509)(images/1568713322937.png)]
[外链图片转存失败(img-dXN5knYm-1568775721509)(images/1568713342597.png)]
引入maven依赖信息
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.0.1.RELEASEversion>
parent>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.M7version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-config-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
dependencies>
<repositories>
<repository>
<id>spring-milestonesid>
<name>Spring Milestonesname>
<url>https://repo.spring.io/libs-milestoneurl>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
新建bootstrap.yml
spring:
application:
####注册中心应用名称 (不能乱写 要与git上配置文件名字一致)
name: test-configClient
cloud:
config:
####读取版本环境
profile: prd
####读取config-server注册地址 直接写configServer注册的应用服务名即可
discovery:
service-id: config-server
### 开启读取权限
enabled: true
#####eureka服务注册地址
eureka:
client:
service-url:
defaultZone: http://localhost:8100/eureka
### 服务端口号
server:
port: 8882
### 开启所有端点
management:
endpoints:
web:
exposure:
include: "*"
注意 应用名称必须与git上的文件名字保持一致 不能乱写 git上文件名如下
[外链图片转存失败(img-Wy5GLbSd-1568775721510)(images/1568774685753.png)]
创建 TestController.java
package com.itmayiedu.api.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class TestController {
@Value("${itmayieduinfo}")
private String itmayieduinfo;
@RequestMapping("/getItmayieduinfo")
public String getItmayieduinfo() {
return itmayieduinfo;
}
}
创建 SpringBoot
启动类
package com.itmayiedu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class AppConfigClient {
public static void main(String[] args) {
SpringApplication.run(AppConfigClient.class, args);
}
}
启动成功后访问地址如下:
http://localhost:8882/getItmayieduinfo
[外链图片转存失败(img-hjIMp03z-1568775721510)(images/1568774806979.png)]x
默认情况下不能及时的获取实时变更的配置文件信息
手动刷新和自动刷新都不需要重启服务器
在公司当中,不建议大家使用自动刷新功能,因为对性能不是很好,建议在每次修改完配置文件之后 人工调用接口
http://localhost:8882/actuator/refresh
进行刷新
添加maven依赖 注意是在 config-client模块中
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
bootstrap.yml中新增 开启监控端点
### 开启所有端点
management:
endpoints:
web:
exposure:
include: "*"
在需要刷新的Bean上添加@RefreshScope
注解。
package com.itmayiedu.api.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 当配置更改时,标有@RefreshScope的Bean将得到特殊处理来生效配置
@RestController
@RefreshScope
public class TestController {
@Value("${itmayieduinfo}")
private String itmayieduinfo;
@RequestMapping("/getItmayieduinfo")
public String getItmayieduinfo() {
return itmayieduinfo;
}
}
手动刷新接口(Post请求手动刷新)
http://127.0.0.1:8882/actuator/refresh
启动刷新器 从cofnig server读取
[外链图片转存失败(img-vRlu0Vvx-1568775721511)(images/1568775125536.png)]