建立数据库
建立个用于存放配置的数据库名为nacos-config,nacos/conf下有一个nacos-mysql.sql
,运行一下便可获得存放配置信息的表
配置数据源
修改nacos/conf/application.properties
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://xxxxxxx:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=xxxxxxx
记得重启
应用接入配置中心
依赖
<!-- Spring Boot Web模块 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos注册中心starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Nacos配置中心starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
配置文件,我们把原来的application.yml删除了,我们不再需要本地配置
然后创建文件bootstrap.yml,注意名字要一模一样
spring:
application:
name: order-service #微服务id
profiles:
active: dev #环境名
cloud:
nacos:
config: #Nacos配置中心配置
file-extension: yml #文件扩展名
server-addr: 192.168.31.10:8848
username: nacos
password: nacos
logging: #开启debug日志,仅为学习时使用
level:
root: debug
定义一份配置文件是用微服务id-环境名.文件扩展名
三部分组合为有效的 data id,比如上面的就是order-service-dev.yml
然后去Nacos把原来的那些应用配置给存到云端
点击➕ 号新建配置
注意data id 就是上面说的微服务id-环境名.文件扩展名
,然后选择yaml格式,把我们以前写在本地的配置文件写到下面的配置内容中
此时新建的配置信息其实就是用我们之前配置的MySQL存的,你会发现这些配置信息存在config-info表中了
配置热加载技术
当我们突然修改配置文件后,为了生效我们必须重启一下应用,就有点麻烦,为了解决这个问题,我们用到了配置热加载技术
为了支持热加载,服务的程序针对热加载需要作出如下变动:
第一,配置数据必须被封装到单独的配置 Bean 中;
第二,这个配置 Bean 需要被 @Configuration
与 @RefreshScope
两个注解描述。
@Configuration
@RefreshScope
public class CustomConfig {
@Value("${custom.flag}")
private String flag;
@Value("${custom.database}")
private String database;
public String getFlag() {
return flag;
}
public void setFlag(String flag) {
this.flag = flag;
}
public String getDatabase() {
return database;
}
public void setDatabase(String database) {
this.database = database;
}
}
在配置处用@Resource
注入即可
@RestController
public class TestController {
@Resource
private CustomConfig customConfig;
@GetMapping("/test")
public String test(){
return "flag:" + customConfig.getFlag() + "<br/> database:" + customConfig.getDatabase();
}
}
现在我们需要变更配置文件时只需在Nacos中修改配置,它就会自动推送到应用而不需要每次都重启应用了。
分环境配置
这个其实和原来没有用配置中心的差不多,生产环境的配置就在文件名后加-prod
,配置环境就加-dev
,共用的基础全局配置就直接application.yml
什么也不用加。
对于现在微服务架构具体来说就是
- order-service-dev.yml 开发环境
- order-service-prod.yml 生产环境
- order-service.yml 共用
当然,如果要改变你要用的环境,还是需要改bootstrap.yml
spring:
profiles:
active: prod #环境名