我们可以将之前的子模块中的配置提取出来,托管到gitee上统一管理,这样运维人员维护配置文件就不变动子模块了,实现了模块与配置的解耦。
下面用例子来解释下这种做法的好处
在基础工程spring-cloud-microservice下,建立和microservice-cloud-eureka-7003一样的microservice-cloud-eureka-config-7003注册中心,需要在microservice-cloud-eureka-7003工程pom的基础上补充config相关依赖
org.springframework.cloud
spring-cloud-starter-config
3.1.4
org.springframework.cloud
spring-cloud-starter-bootstrap
org.springframework.boot
spring-boot-starter-actuator
#bootstrap.yml 是系统级别的,加载优先级高于 用户级别application.yml ,负责从外部加载application.yml配置并解析
#对应了java的加载器,根加载器由于用户加载器
spring:
application:
name: MicroserviceCloudEurekaConfig7003 #微服务名称,对外暴漏的微服务名称,十分重要
cloud:
config:
label: master #仓库分支名
name: configEureka #配置文件名称,如:application-dev.yml 中的 application,或application.yml集成配置文件
profile: dev #环境名 如:application-dev.yml 中的 application, 中的 dev,或application.yml继承环境中的dev
#别忘记添加 http:// 否则无法读取
##Spring Cloud Config Server地址
uri: http://localhost:8016
spring:
profile:
active: dev
---
server:
port: 7003
spring:
config:
activate:
on-profile: dev
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
instance:
hostname: eurekaserver7003.com #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
service-url: #监控页面地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
---
server:
port: 7004
spring:
config:
activate:
on-profile: test
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
instance:
hostname: eurekaserver7004.com #eureka7001.comeureka服务端的实例名称,主机名是否可以在配置时确定(否则将从操作系统原语中猜测)
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #指示此客户端是否应从 eureka 服务器获取 eureka 注册表信息
service-url: #监控页面地址
#defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #发布的服务注册中心地址,单机
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/ #集群版 将当前的 Eureka Server 注册到 7003 和 7003 上,形成一组互相注册的 Eureka Server 集群
这样先启动下microservice-cloud-config-server-8016配置服务,访问http://localhost:8016/master/configEureka-dev.yml说明config server连接正常
然后启动microservice-cloud-eureka-config-7003注册中心,访问http://localhost:7003/结果如下。注意此时的7003端口是从config server处读取的。
由此可知microservice-cloud-eureka-config-7003成功启动并运行
然后同样的在基础工程spring-cloud-microservice下建立仿制microservice-cloud-provider-dept-8001服务提供模块建立一个microservice-cloud-provider-dept-config-8001模块,代码基本相同。项目结构如图
同样需要在pom中补充config相关依赖
org.springframework.boot
spring-boot-starter-actuator
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-bootstrap
#bootstrap.yml 是系统级别的,加载优先级高于 用户级别application.yml ,负责从外部加载application.yml配置并解析
#对应了java的加载器,根加载器由于用户加载器
spring:
cloud:
config:
label: master #仓库分支名
name: configdept #配置文件名称,如:application-dev.yml 中的 application,或application.yml集成配置文件
profile: dev #环境名 如:application-dev.yml 中的 application, 中的 dev,或application.yml继承环境中的dev
#别忘记添加 http:// 否则无法读取
##Spring Cloud Config Server地址
uri: http://localhost:8016
spring:
profile:
active: dev
---
server:
port: 8001
spring:
application:
name: microservicecloudproviderdeptconfigDev #微服务名称,对外暴漏的微服务名称,十分重要
config:
activate:
on-profile: dev
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springcloud_db2?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTC
type: com.alibaba.druid.pool.DruidDataSource
#SpringBoot默认是不注入这些的,需要自己绑定
#druid数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority
#则导入log4j 依赖就行
filters: stat,wall,log4j2
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#整合mybatis
mybatis:
type-aliases-package: com.zk.springcloud.entity
mapper-locations: classpath:mybatis/mapper/*.xml
#config-location: classpath:mybatis/mybatis-config.xml
configuration:
map-underscore-to-camel-case: true #默认开启驼峰命名法,可以不用设置该属性
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
client:
service-url:
#defaultZone: http://localhost:7001/eureka/ #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7003.com:7003/eureka/ #将服务注册到 Eureka Server 集群
fetch-registry: true
instance:
instance-id: microservice-cloud-provider-dept-config-8001-dev #自定义服务名称描述信息
prefer-ip-address: true #显示访问路径的 ip 地址
#zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
management:
endpoints:
web:
exposure:
include: health,info #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号
#include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥
info:
env:
enabled: true #启用配置里的info开头的变量
info: #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常
app.name: microservice-cloud-provider-dept-config-8001-dev
company.name: cloud.zk.com
auth: zk
email: [email protected]
#build.aetifactId: @project.artifactId@
#build.version: @project.version@
---
server:
port: 8002
spring:
application:
name: microservicecloudproviderdeptconfigTest #微服务名称,对外暴漏的微服务名称,十分重要
config:
activate:
on-profile: test
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://localhost:3306/springcloud_db3?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTC
type: com.alibaba.druid.pool.DruidDataSource
#SpringBoot默认是不注入这些的,需要自己绑定
#druid数据源专有配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
#配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
#如果允许报错,java.lang.ClassNotFoundException: org.apache.Log4j.Priority
#则导入log4j 依赖就行
filters: stat,wall,log4j2
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
#整合mybatis
mybatis:
type-aliases-package: com.zk.springcloud.entity
mapper-locations: classpath:mybatis/mapper/*.xml
#config-location: classpath:mybatis/mybatis-config.xml
configuration:
map-underscore-to-camel-case: true #默认开启驼峰命名法,可以不用设置该属性
#eureka配置,Spring cloud 自定义服务名称和 ip 地址
eureka:
client:
service-url:
#defaultZone: http://localhost:7001/eureka/ #这个地址是 7001注册中心在 application.yml 中暴露出来额注册地址 (单机版)
defaultZone: http://eurekaserver7001.com:7001/eureka/,http://eurekaserver7002.com:7002/eureka/,http://eurekaserver7004.com:7004/eureka/ #将服务注册到 Eureka Server 集群
fetch-registry: true
instance:
instance-id: microservice-cloud-provider-dept-config-8001-test #自定义服务名称描述信息
prefer-ip-address: true #显示访问路径的 ip 地址
#zookeeper需要配置那些服务service被扫描,eureka则是将整个服务包注册进去了
# spring cloud 使用 Spring Boot actuator 监控完善信息
# Spring Boot 2.50对 actuator 监控屏蔽了大多数的节点,只暴露了 heath 节点,本段配置(*)就是为了开启所有的节点
management:
endpoints:
web:
exposure:
include: health,info #应包含的端点 ID 或 '' 全部,* 在yaml 文件属于关键字,所以需要加双引号
#include的值也可以改成*,但建议还是最小暴露原则,用啥开启啥
info:
env:
enabled: true #启用配置里的info开头的变量
info: #配置一些服务描述信息,监控信息页面显示,,可以判断服务是否正常
app.name: microservice-cloud-provider-dept-config-8001-test
company.name: cloud.zk.com
auth: zk
email: [email protected]
#build.aetifactId: @project.artifactId@
#build.version: @project.version@
注意若是git上有其他的名为application.yml配置文件,有可能会和别的配置文件,如:configdept.yml的配置项糅合,导致配置文件莫名多出一些配置,所以最好将application.yml修改为模块对应的名称
然后启动microservice-cloud-provider-dept-config-8001模块,访问http://localhost:8001/dept/list结果如下,
由数据源字段显示,说明microservice-cloud-provider-dept-config-8001成功启动并成功读取到配置文件内容,读取了开发环境springcloud_db2数据库中的内容
然后修改configEureka.yml为test测试环境并提交,激活test环境,修改microservice-cloud-eureka-config-7003中bootstrap.yml的读取的环境配置为test,
然后启动microservice-cloud-eureka-config-7003注册中心,访问http://localhost:7004/结果如下。说明此时测试环境配置生效。
然后修改configdept.yml为test测试环境并提交,激活test环境。修改microservice-cloud-provider-dept-config-8001中bootstrap.yml的读取的环境配置为test。
然后启动microservice-cloud-provider-dept-config-8001注册中心,访问http://localhost:8001/dept/list结果如下。说明此时测试环境配置生效。
这样就实现了微服务下配置中心的统一管理,实现了配置文件于模块的解耦。