使用权限进行配置读写操作,需要配置application.properties
### If turn on auth system:
nacos.core.auth.enabled=true
登录新账号进行测试
没有权限访问 public
测试新增配置
nacos-config 官方文档https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
更改pom文件
继承 sunflower,添加nacos-config 依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>com.ycgroupId>
<version>0.0.1-SNAPSHOTversion>
<artifactId>sunflowerartifactId>
parent>
<artifactId>nacos-configartifactId>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
父工程中添加子模块
<modules>
<module>ordermodule>
<module>stockmodule>
<module>order-nacosmodule>
<module>stock-nacosmodule>
<module>order-ribbonmodule>
<module>order-openfeginmodule>
<module>product-nacosmodule>
<module>nacos-configmodule>
modules>
官方说明
必须使用 bootstrap.properties 配置文件来配置Nacos Server 地址 也支持bootstrap.yml
创建 bootstrap.properties
spring.application.name=config-nacos
spring.cloud.nacos.server-addr=localhost:8848
application.yml文件 配置启动端口 8050
server:
port: 8050
主启动类输出配置文件内容
@SpringBootApplication
public class NacosConfigApplication {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :"+userName+"; age: "+userAge);
}
}
启动项目测试
启动项目报错 403
原因是因为,nacos配置了权限,所以要制指定用户名和密码
spring.application.name=config-nacos
spring.cloud.nacos.server-addr=localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
重启项目进行测试
输出结果为 user name :wangsoft(电脑名); age: null
可通过 命令行进行查看电脑名 set user
原因分析
spring.application.name=config-nacos 名称和nacos中的配置文件名显示的不一样 需要使用nacos配置文件的名称
spring.application.name=com.yc.ordernacos.redis # 更改为配置文件的名称
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.config.namespace= namespace如果是public 命名空间可以直接省略,或者直接注释这一行 如果配置了 则输出结果还是电脑的名字
演示 spring.cloud.nacos.config.namespace= public
spring.application.name=com.yc.ordernacos.redis nacos配置文件
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.config.namespace=public 命名空间
读取配置文件内容 yaml格式
官方文档说明
新建nacos-config 配置文件
修改bootstrap.properties 配置文件
# 配置文件地址
spring.application.name=com.yc.order.mysql
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
主启动类更改为循环读取文件
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(NacosConfigApplication.class, args);
while(true) {
//当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name :" + userName + "; age: " + userAge);
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
官方提供了两种配置方式
# 配置支持共享的 Data Id
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
# 配置 Data Id 所在分组,缺省默认 DEFAULT_GROUP
spring.cloud.nacos.config.shared-configs[0].group=GROUP_APP1
# 配置Data Id 在配置变更时,是否动态刷新,缺省默认 false
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.application.name=opensource-service-provider
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
# config external configuration
# 1、Data Id 在默认的组 DEFAULT_GROUP,默认不支持配置的动态刷新
spring.cloud.nacos.config.extension-configs[0].data-id=ext-config-common01.properties
# 2、Data Id 不在默认的组,默认不支持动态刷新
spring.cloud.nacos.config.extension-configs[1].data-id=ext-config-common02.properties
spring.cloud.nacos.config.extension-configs[1].group=GLOBALE_GROUP
# 3、Data Id 既不在默认的组,也支持动态刷新
spring.cloud.nacos.config.extension-configs[2].data-id=ext-config-common03.properties
spring.cloud.nacos.config.extension-configs[2].group=REFRESH_GROUP
spring.cloud.nacos.config.extension-configs[2].refresh=true
nacos新创建配置文件 com.yc.common2.yaml
# 配置文件地址服务名称
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
# 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
# 指定自定义的data-id
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.common2.yaml
启动醒目 输出结果为: user name :com.yc.common2.yaml; age: null
演示相同命名空间,不同分组
新建com.yc.common3.yaml
# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.common3.yaml
# 指定自定义分组
spring.cloud.nacos.config.shared-configs[0].group=COMMON_GROUP
输出结果
user name :common3.相同命名空间,不同分组 COMMON_GROUP; age: null
# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
#指定命名空间 使用MD5 并不是Data ID
spring.cloud.nacos.config.namespace=009e25c9-0169-4885-bb86-801200a9bd5a
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.lucky.yaml
输出结果为 user name :com.yc.lucky.yaml lucky命名空间; age: null
两种方式说明
第一种
spring.cloud.nacos.config.extension-configs[0].data-id=common.yaml
第二种
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml
两种方式使用方法一样,不同的是 优先级不同
shared-configs[n] > extension-configs[n]
使用 @Value(“${user.name}”) 注解获取配置文件值的时候不会动态刷新
,配合使用 @RefreshScope注解
**添加ConfigController **
@RestController
@RequestMapping("/config")
public class ConfigController {
@Value("${user.name}")
private String name; 使用
@RequestMapping("/getValues")
public String getValues(){
return name;
}
}
访问http://localhost:8050/config/getValues
更新配置文件
访问不会发生变化
更改ConfigController
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${user.name}")
private String name;
@RequestMapping("/getValues")
public String getValues(){
return name;
}
}
更改bootstrap.properties
# 配置文件地址
spring.application.name=config-nacos
spring.cloud.nacos.server-addr= localhost:8848
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#新增 配置文件格式
spring.cloud.nacos.config.file-extension=yaml
#指定命名空间 使用MD5 并不是Data ID
spring.cloud.nacos.config.namespace=009e25c9-0169-4885-bb86-801200a9bd5a
spring.cloud.nacos.config.shared-configs[0].data-id=com.yc.lucky.yaml
# 开启动态刷新, 默认不支持动态刷新
spring.cloud.nacos.config.shared-configs[0].refresh=true
访问结果OK
spring-cloud-alibaba(六)Sentinel 篇