Spring Cloud Config(maven+idea+eureka+本地文件+加密解密+更新)

1.各个系统配置文件的统一集中管理

2.服务端配置(maven+idea+eureka+本地文件)

2.1.pom.xml

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.1.9.RELEASE</version>

<relativePath/>

</parent>

<groupId>com.tsnt</groupId>

<artifactId>config-server</artifactId>

<version>0.0.1-SNAPSHOT</version>

<name>config-server</name>

<description>Config Server</description>

<properties>

<spring.version>5.1.10.RELEASE</spring.version>

<springboot.version>2.1.9.RELEASE</springboot.version>

<spring-cloud.version>Greenwich.SR3</spring-cloud.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-config-server</artifactId>

</dependency>

  <dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</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>

2.2 yml文件  分两种application.yml和bootstrap.yml(加密解密只能配置在bootstrap里)

server:

    port: 9002

spring:

    application:

        name: tsnt-config-server

    profiles:

          active: native    #读取本地配置文件

    cloud:

           config:

                  server:

                        native:

                          #常用的两种,不止两种方式:1. file:./config  文件目录位置

                           #2. classpath  src/main/resources/ 下的文件地址

                           #注意文件同名 配置会存在后面的覆盖前面  所以需要保证不同目录文件名也不一致;不同目录方便管理

                                  search-locations: classpath:/config/gateway,classpath:/config/sso

# Eureka服务中心配置

eureka:

    instance:

        #以IP注册到Eureka Server上,未设置ip-address Spring就会自动为我们获取本机的第一个非回环IP地址

        prefer-ip-address: true

        #强制指定IP地址,默认会获取本机的IP地址

        #ip-address: 172.16.1.115

        #服务中心的信息显示,eureka界面注册服务名,默认是hostname:应用名称:端口

        instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

        # 参数用于定义服务续约任务的调用间隔时间,默认30秒

        leaseRenewalIntervalInSeconds: 5

        # 参数用于定义服务失效的时间,默认90秒

        leaseExpirationDurationInSeconds: 10

  client:

        service-url:

             # 注册Eureka Server

              defaultZone: http://localhost:9100/eureka/

3.客户端配置

3.1 pom.xml(只写必须的依赖,其他的和服务端大同小异)

<!--eureka-client 注册中心客户端-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

<!--config-client 配置中心客户端-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-config-client</artifactId>

</dependency>

<!--config-client 暴露刷新配置-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

3.2 yml文件(bootstrap.yml或者application.yml都可以,系统级与应用级配置文件,加载优先级不同)

#bootstrap配置配置文件会先于application配置文件加载

server:

    port: 9101

spring:

    application:

        name: api-gateway#指定了服务中心serviceId(大写)

      cloud:

            config:

                  name: gateway#读取配置文件的前缀名称

                   #uri: http://localhost:7001/    #无注册中心指定Config server的uri

                   profile: dev                           #指定的环境,读取配置文件的后缀名称

                    #label: master                  #指定分支,非git无用处

                    fail-fast: true                  #快速失败模式

                    #retry:                          #重试

                            #initial-interval: 1100    #首次重试间隔时间,默认1000毫秒

                            #multiplier: 1.1D          #下一次重试间隔时间的乘数,比如开始1000,下一次就是1000*1.1=1100

                            #max-interval: 2000        #最大重试时间,默认2000

                            #max-attempts: 3          #最大重试次数,默认6次

                  discovery:

                            enabled: true                  #开启配置服务发现

                            serviceId: config-server #配置中心在服务中心serviceId(小写)

management:

    endpoints:

        web:

            exposure:

                  include: refresh    #暴露刷新配置的endpoint 

# Eureka服务中心配置

eureka:

    instance:

        #以IP注册到Eureka Server上,未设置ip-address Spring就会自动为我们获取本机的第一个非回环IP地址

        prefer-ip-address: true

        #强制指定IP地址,默认会获取本机的IP地址

        #ip-address: 192.16.1.115

        #服务中心的信息显示,eureka界面注册服务名,默认是hostname:应用名称:端口

        instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}

        # 参数用于定义服务续约任务的调用间隔时间,默认30秒

        leaseRenewalIntervalInSeconds: 5

        # 参数用于定义服务失效的时间,默认90秒

        leaseExpirationDurationInSeconds: 10

      client:

            service-url:

             # 注册Eureka Server

              defaultZone: http://localhost:9100/eureka/

4.配置文件敏感信息加密与解密

基于jdk自带的加密与解密

4.1注意需要需要把 jre\lib\security\policy\unlimited下的两个jar拷到jre\lib\security下   不然回报长度key size异常

4.2配置信息需要放在bootstrap.yml配置文件,不能用application.yml配置文件

encrypt:

    key-store:

        # cmd命令:keytool -genkeypair -alias "config-key" -keyalg "RSA" -keystore D:\config.keystore

        location: classpath:config.keystore  #利用jdk生成 jks或者keystore文件 拷到resources目录下即可

        alias: config-key   #key

        password: tsntconfig

        secret: tsntconfig

4.3加密

可以利用curl进行加密

4.4 yml文件  :   '{cipher}密文'         #jdk8的密文不能换行

4.5 客户端会来服务端取配置内容,所以加密解密都只是服务端的事,自动解密(也可以客户端自己解密)

5.配置文件的更新

5.1.添加配置客户端依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

5.2更新配置的配置文件配置

5.2.1配置服务端配置

management:

        endpoints:

            web:

                exposure:

                    include: "*"     #对外暴露所有服务

5.2.2配置客户端的配置

management:

    endpoints:

           web:

               exposure:

                   include: refresh     #对外暴露可刷新服务

5.2.3本地文件更新说明:

针对服务端的配置文件,保存更改的配置文件过后,访问服务端配置文件会自动加载访问的配置文件进内存(native会随着每次访问加载最新配置文件,即说明服务端会自动更新,但是需要客户端的请求进行触发服务端重新加载配置文件);

客户端手动更新 POST 请求http://configclient-host:port/actuator/refresh

spring cloud bus  (依赖mq,支持rabbitmq与kafka) ,能实现自动刷新客户端配置

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容