注册中心与配置中心
✔️本地安装:
https://github.com/alibaba/nacos/releases
下载2.1.1版本,本地startup.cmd启动,窗口闪退,打开cmd文件末尾加入
pause
endlocal
重新启动查看报错信息:
"nacos is starting with cluster"
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
Press any key to continue . . .
没有足够的内存就离谱,猜想一下是之前调整jvm的缘故, tomcat的目录/bin/catalina.bat,
删掉set CATALINA_OPTS=-Xmx1024M -Xms1024M -XX:+HeapDumpOnOutOfMemoryError -XX:PermSize=256M,改回默认jvm大小,重新启动。
没用。。
啊第一句nacos is starting with cluster,以集群方式启动,设置修改一下
cmd文件里set MODE="cluster"改成set MODE="standalone"然后启动
又报错。。。
陷入了沉思,报错信息:
Caused by: java.lang.UnsupportedOperationException: Cannot determine JNI library name for ARCH='x86' OS='windows 10' name='rocksdb'
我的jdk不是64的吗,打开用了半年的jdk,jdk-8u321-windows-i586.exe,32位的。。。害挺牛用这么久
重装jdk,重新启动,启动成功
输入网址查看http://localhost:8848/nacos/#/login 用户密码默认nacos
✔️数据库配置
nacos默认conf文件夹下有sql文件,nacos-mysql.sql,数据库执行该文件
修改完成在同文件夹下找到application.properties,修改db连接,取消注释,修改登录账户密码
✔️spring boot集成nacos
pom文件增加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
创建bootstrap.properties或bootstrap.yml文件加入配置
spring.application.name=test-nacos
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
spring.cloud.nacos.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.namespace=PROD
spring.cloud.nacos.config.namespace=PROD
spring.cloud.nacos.config.timeout=3000
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.group=apm
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.config.shared-configs[0].group=apm
spring.cloud.nacos.config.shared-configs[0].data-id=apm-mobile-android.properties
spring.cloud.nacos.config.shared-configs[0].refresh=true
spring.liquibase.enabled=false
spring boot的启动类加入注解
@EnableDiscoveryClient
启动,好成功报错
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
很明显,新建项目没有连接数据库,pom文件加入一系列mysql依赖,顺手再加个mybatis-plus依赖,yml文件加入配置,重新启动
good,,启动成功👍
数据源
既然使用了nacos就不用spring 配置数据源的操作了,上nacos动态配置数据源,注掉application.yml的数据源配置,bootstrap.properties中nacos的配置,创建bootstrap.yml文件
注:spring中yml文件的优先级是高于properties的
spring:
application:
name: demo
cloud:
nacos:
username: nacos
password: nacos
config:
server-addr: 127.0.0.1:8848
file-extension: properties
在nacos客户端配置好配置内容properties文件,dataid为demo.properties
management.health.defaults.enabled=false
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
server.port = 8080
jdbc.driver=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
management.health.defaults.enabled=false,关闭健康检查
重新启动,启动成功
ok开始写个测试类康康是否获取到了nacos配置的数据库连接
@Component
@RefreshScope
@Data
public class TestValue {
@Value("${spring.datasource.username}$")
private String user;
@Value("${spring.datasource.password}$")
private String passWord;
}
@RestController
@RequestMapping("/config")
public class ConfigController {
@Autowired
private TestValue testValue;
@GetMapping("/getUser")
public Object getValue(){
Map<String,Object> map = new HashMap<>();
map.put("user",testValue.getUser());
map.put("password",testValue.getPassWord());
return map;
}
}
postman调用,成功打印