Nacos环境准备
1.什么是Nacos
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
2.下载安装Nacos
3.版本选择
官方版本对应说明文档:选择好对应的依赖版本,避免引起jar包冲突
使用Nacos
1.Maven依赖导入
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.Nacos服务注册和发现
[官方例子]
第一步:首先,修改 pom.xml 文件,引入 Nacos Discovery Starter。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
第二步:配置application.yml(application.properties) 端口/ 服务名/Nacos Server 地址
server:
port: 9003 #端口
spring:
application:
name: nacos-server #服务名
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848 #Nacos Server 地址
第三步:开启服务发现,启动类上添加@EnableDiscoveryClient
@EnableDiscoveryClient
@SpringBootApplication
public class NacosServerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosServerApplication.class, args);
}
}
启动nacos server服务后再启动服务,然后就可以再服务列表看到注册的服务
3.Nacos作为配置中心
tip:完成注册步骤后
第一步:首先,修改 pom.xml 文件,引入 Nacos Config Starter。
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
第二步:新建配置bootstrap.yml(bootstrap.properties) 路径: /src/main/resources/bootstrap.yml
spring:
application:
name: nacos-server #服务名
cloud:
nacos:
config:
file-extension: yaml #文件类型,默认是properties
server-addr: 127.0.0.1:8848 #Nacos Server 地址
namespace: d1b0c3da-f1bc-44fc-9ee2-2d6c134ecda0 #命名空间 默认是public 不需要不配置
group: dev #分组 默认是DEFAULT_GROUP 不需要不配置
第三步:使用配置中心的配置
tip:在对应的namespace创建配置,默认会加载 服务名.properties
,配置file-extension: yaml后会加载 服务名.yml
- 新建配置
看配置选择YAML或者Properties都可以,只是书写方式不一样,配置内容发布
输入内容:Data ID(配置集Id):nacos-server,Group(组):dev,配置格式:yaml
配置内容:
test:
user:
age: 22
name: james
-
测试使用代码,并添加 @RefreshScope 打开动态刷新功能
@RefreshScope @RestController @RequestMapping("test") public class SampleController { @Value("${test.user.name}") String userName; @Value("${test.user.age}") int age; /** * 测试配置中心 * @return */ @RequestMapping("/config") public Map<String,Object> config(){ Map<String,Object> map = new HashMap<>(); map.put("userName",userName); map.put("age",age); return map; } }
测试结果:成功
配置的加载顺序:会优先加载nacos配置中心的配置,如果没有则加载本地的配置
4.Nacos的多配置加载
extension-configs
nacos界面操作:
- data-id名称,需要带上后缀名,默认的不需要带后缀
- data-id的文件后缀必须和配置格式一样
tips:
- data-id不支持动态刷新,需要配置refresh=true
- [x],数值越大,优先级越高
配置样例:
spring:
application:
name: nacos-server
cloud:
nacos:
config:
file-extension: yaml #文件类型,默认是properties
server-addr: 127.0.0.1:8848 #Nacos Server 地址
namespace: d1b0c3da-f1bc-44fc-9ee2-2d6c134ecda0 #命名空间 默认是public 不需要不配置
group: dev #分组 默认是DEFAULT_GROUP 不需要不配置
extension-configs[0]:
data-id: datasource.yml #配置集名称 文件名
group: dev #分组
refresh: true #动态刷新
extension-configs[1]:
data-id: mybatis.yml
group: dev
refresh: true
extension-configs[2]:
data-id: other.yml
group: dev
refresh: true
shared-configs
配置样例:
spring:
cloud:
nacos:
config:
shared-configs[0]:
data-id: datasource.yml
group: dev
refresh: true
shared-configs[1]:
data-id: mybatis.yml
group: dev
refresh: true
shared-configs[2]:
data-id: other.yml
group: dev
refresh: true
ext-config[已废弃]
配置样例:
spring:
cloud:
nacos:
config:
ext-config[0]:
data-id: datasource.yml
group: dev
refresh: true
ext-config[1]:
data-id: mybatis.yml
group: dev
refresh: true
ext-config[2]:
data-id: other.yml
group: dev
refresh: true
优先级
bootstrap.yml>application.yml
默认加载> extension-configs>shared-configs
bootstrap.yml :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。
application.yml: 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。
优先级
bootstrap.yml>application.yml
默认加载> extension-configs>shared-configs
bootstrap.yml :用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootstrap.yml 被加载,则内容不会被覆盖。
application.yml: 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。