由于近期项目改造,需要将原先的微服务配置中心使用起来,所以先对springcloud1.5x版本的配置方式写一下,后续将微服务升级为springcloud2.x版本,再补充配置内容
1、ConfigServer服务端配置
① application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8100/eureka/
security:
basic:
enabled: false
server:
port: 8101
spring:
application:
name: config-server
profiles:
active: native
cloud:
config:
server:
native:
search-locations: D:/workspace/config-files #本地存储配置文件
rabbitmq:
host: 127.0.0.1
port: 5672
username: admin
password: admin
management:
security:
enabled: false
② pom配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 使用bus总线的方式通知所有的微服务配置文件需要刷新 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
2、Client端配置
2.1 配置文件
在client端,需要添加bootstrap.yml配置文件,因为bootstramp配置文件的加载时间早于application配置文件的加载时间,所以需要用bootstrap配置文件来引导client端的配置
bootstrap.yml
-----------------------------------
spring:
cloud:
config:
uri: http://localhost:8101 # configserver的访问路径
profile: dev
rabbitmq:
host: 127.0.0.1
port: 5672
username: admin
password: admin
management:
security:
enabled: false
security: #是否开启基本的鉴权,默认为true
basic:
enabled: false
2.2 配置类修改
由于测试client端使用变更数据库查看动态配置效果,所以需要配置DataSourceConfig,@RefreshScope用于热更新配置,需要用热更新配置的配置文件,需要使用@RefreshScope来修饰,意味着其他的配置如果需要热配置更新,都需要写一个配置类,并使用@RefreshScope来修饰
@Configuration
public class DataSourceConfig {
@Bean
@RefreshScope
@Primary
@ConfigurationProperties("spring.datasource.druid")
public DataSource dataSource(){
return DruidDataSourceBuilder.create().build();
}
}
2.3 pom依赖
<!--Spring Boot Actuator,感应服务端变化-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 使用bus总线的方式通知所有的微服务配置文件需要刷新 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
3、配置文件存放及配置文件命名
Config支持我们使用的请求的参数规则为:
/ { 应用名 } / { 环境名 } [ / { 分支名 } ]
/ { 应用名 } - { 环境名 }.yml
/ { 应用名 } - { 环境名 }.properties
/ { 分支名 } / { 应用名 } - { 环境名 }.yml
/ { 分支名 } / { 应用名 } - { 环境名 }.properties
注意:
1、第一个规则的分支名是可以省略的,默认是master分支
2、无论你的配置文件是properties,还是yml,只要是应用名+环境名能匹配到这个配置文件,那么就能取到
3、如果是想直接定位到没有写环境名的默认配置,那么就可以使用default去匹配没有环境名的配置文件
4、使用第一个规则会匹配到默认配置
5、如果直接使用应用名来匹配,会出现404错误,此时可以加上分支名匹配到默认配置文件
6、如果配置文件的命名很由多个-分隔,此时直接使用这个文件名去匹配的话,会出现直接将内容以源配置文件内容直接返回,内容前可能会有默认配置文件的内容(已测试)
4、本地配置文件-样例
api-manager-dev.yml
api-manager: client配置的工程名
dev: bootstrap.yml中配置的环境(dev/prod/test)名字
以下是api-manager-dev.yml的内容:
---------------------------------------------------
eureka:
instance:
prefer-ip-address: true
client:
serviceUrl:
defaultZone: http://localhost:8100/eureka/
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.jdbc.Driver
druid:
url: jdbc:mysql://127.0.0.11:3306/test?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
# url: jdbc:mysql://127.0.0.1:3306/test1?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: 123456
initial-size: 2
max-active: 100
min-idle: 2
max-wait: 60000
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
jackson:
date-format: yyyy-MM-dd
time-zone: GMT+8
5、测试
启动:configserver、client
1、修改api-manager-dev.yml配置文件
2、使用POST请求,发送请求
http://localhost:8101/bus/refresh
来刷新配置文件,并通过bus总线通知到client端