快速入门
依赖:
<dependencies>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
主类:
public class SimpleDemoMain {
public static void main(String[] args) throws NacosException, InterruptedException {
//nacos地址
String serverAddr = "localhost:8848";
//Data Id
String dataId = "nacos-simple-demo.yaml";
//Group
String group = "DEFAULT_GROUP";
//命名空间(开发环境)。最好是指定命名空间id而不是名字的
String namespace = "2a79a8bd-be6d-4148-9b5d-130df031efa1";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("namespace", namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置dataId, group, timeoutMs
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);
//监听命名空间下配置文件的变化
configService.addListener(dataId, group, new Listener() {
@Override
public Executor getExecutor() {
return null;
}
@Override
public void receiveConfigInfo(String s) {
//当配置有变化 的时候获取通知
System.out.println(s);
}
});
while (true){
Thread.sleep(2000);
}
}
}
可以拿到配置内容:
common:
config1: something
对于Nacos配置管理,通过Namespace,group, DataId能够定位到一个配置集。
配置集(Data ID):就是一个配置文件,一个配置集可以包含数据库、线程池、日志级别等配置项。
配置项:配置集中的包含的一个个内容,代表一个配置项。它可以代表一个具体的可配置的参数和值域。
配置分组(Group):代表某某项目
命名空间(Namespace):可以应用于不同的开发环境上的隔离,比如开发、测试。默认是public,也可以自己创建。
登录管理
先要开启数据库登录允许,导入数据库修改配置文件
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.3.9.RELEASE</version>
</dependency>
nacos使用的是BCryptPasswordEncoder方式类加密,每次生成密码都会加随机盐
实现密码加密:
public class PasswordEncoderUitl {
public static void main(String[] args) {
String encode = new BCryptPasswordEncoder().encode("123");
System.out.println(encode);
}
}
更新:已经可以通过管理控制界面直接改密码,不需要手动生成密码加密文填充数据库了
可以在配置文件中打开spring.security.enabled=true
Nacos微服务的创建、发布配置
先创建父工程:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.7.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
子工程依赖,配置中心(如果只是作为服务发现,不需要这个)
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
application.yml(推荐yml)
spring:
application:
name: gulimall-coupon
cloud:
nacos:
discovery:
server-addr: localhost:8848
server:
port: 7000
bootstrap.yml(如果只是作为服务发现,不需要这个)
spring:
application:
name: gulimall-coupon #和上面application.yml同名!!
cloud:
nacos:
config:
server-addr: localhost:8848 #配置中心地址
启动类,读取配置:
@SpringBootApplication
@EnableDiscoveryClient
如何获取配置?看下面
@RefreshScope 没有这个将无法动态刷新
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
// @Value("${user.name}") //取出了系统变量
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private Integer age;
@RequestMapping("/test")
public R test() {
return R.ok().put("name", name).put("age", age);
}
}
注意需要在配置列表里创建一个applicationname.properties的文件配置,dataId叫应用名,而group可以暂时留空,以从中获取动态配置。

细节:
1)、命名空间:配置隔离。默认:public(保留空间);默认新增的所有配置都在public空间
1、开发,测试、生产:利用命名空间来做环境隔离。
注意:需要在bootstrap.properties配置上需要使用的哪个命名空间的配置(注意是唯一id而不是名称):
spring.cloud.nacos.config.namespace=c31ea401-85f4-4495-a2d4-6455e7a047ed
2、每一个微服务之间互相隔离,每一个微服务都创建自己的命名空间,只加载自己的命名空间下的配置
2)、配置集:所有的配置的集合
3)、配置集ID:类似于文件名:Data ID(applicationname.yml/properties)
4)、配置分组:默认都在DEFAULT_GROUP。不同组可以有相同名字的配置集id
spring.cloud.nacos.config.group=1111
每个微服务创建自己的命名空间,使用配置分组来区分环境。比如dev、test、prop
一般最好是不同的微服务以命名空间区分,而不同的环境(测试、发布)以配置分组来区分
同时加载多个配置集??
首先,在配置管理里,在某一命名空间下,划分不同的方式写入配置信息


spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=62f8157e-22f8-4a00-bfec-835b5ee84c37
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
spring.cloud.nacos.config.extension-configs[3].data-id=gulimall-coupon.properties
spring.cloud.nacos.config.extension-configs[3].group=dev
spring.cloud.nacos.config.extension-configs[3].refresh=true
这个主要作用是因为spring读取配置,是bootstrap先于application,是yml先于properties
注意,如果是没有在上面指定的配置,则会读取本地的yml。
如果本地没有,就会读取nacos中的DEFAULT_GROUP
最好是加上以下语句,在缺省情况下读取里面的内容,同时也可以省略上面的[3]的东西。(它默认会扫描所有的dev)
spring.cloud.nacos.config.group=dev
nacos集群
复制多份nacos,各自设置不同的端口,绑定的ip
然后复制cluster.conf.example,绑定集群中所有的ip和端口。
#2021-06-28T22:17:42.360
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
连接方式:
server-addr: localhost:8848,loaclhost:8849,localhost:8850