我的 spring boot 2.6.x版本与spring cloud alibaba 2021.x版本的nacos对接的过程。
首先pom加入引用(这里同时加入了注册中心和配置中心):
<!-- nacos--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
项目启动类上添加 @EnableDiscoveryClient注解:
publicclassStructureApplication { publicstaticvoidmain(String[] args) { SpringApplication.run(StructureApplication.class, args); log.info("StructureApplication started successfully"); } }
添加application.yml文件:
server port8081 servlet context-path/sp-structure spring application namesp-structure-application profiles activedev
在application.yml中指定了激活dev环境配置。因此项目中添加application-dev.yml:
spring cloud nacos config groupDEFAULT_GROUP server-addrlocalhost8848 namespacec2897240-442e-4e0e-be5a-eef34d65341d config importoptional:nacos:sp-structure-application-dev.yml
上述配置中的group和namespace是nacos中配置的group和namespace。登录nacos,在group DEFAULT_GROUP和namespace c2897240-442e-4e0e-be5a-eef34d65341d中添加一个名为sp-structure-application-dev.yml的配置文件
配置文件中配置了注册中心、数据库等配置:
spring datasource driver-class-namecom.mysql.cj.jdbc.Driver urljdbcmysql//localhost3306/simple?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true usernameroot passwordroot typecom.alibaba.druid.pool.DruidDataSource druid# 初始化时建立物理连接的个数 initialSize5# 最小连接池数量 minIdle5# 最大连接池数量 maxActive201# 获取连接时最大等待时间,单位毫秒 maxWait60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis60000# 连接保持空闲而不被驱逐的最小时间 minEvictableIdleTimeMillis300000# 用来测试连接是否可用的SQL语句,默认值每种数据库都不相同,这是mysql validationQueryselect 1 # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 testWhileIdletrue cloud nacos discovery server-addrlocalhost8848 groupDEFAULT_GROUP namespacec2897240-442e-4e0e-be5a-eef34d65341d
启动项目,成功注册到nacos注册中心,成功拉取到配置。
下面再尝试一个场景:假如一个项目有很多配置信息,如果放在一个yml文件中可能比较庞大。也许可以将配置分类放在多个yml中进行管理。下面尝试在这个项目中添加一个自定义的string配置。
首先增加一点Controller代码:
publicclassSimController { ("${conf.nac.str.examp:}") privateStringnacosExamp; ("/strConf") (value="/strConf") publicStringgetStrConfig() { returnnacosExamp; } }
计划将conf.nac.str.examp这个配置独立另放一个配置文件。
所以,修改application-dev.yml的配置,增加一个配置文件:
spring cloud nacos config groupDEFAULT_GROUP server-addrlocalhost8848 namespacec2897240-442e-4e0e-be5a-eef34d65341d config importoptional:nacos:sp-structure-application-dev.yml optional:nacos:$spring.application.name-tyy-$spring.profiles.active.yml
上面新的配置文件的名称换了一种写法。使用${}占位符替代名称。系统会使用环境变量替代,最终就是sp-structure-application-tyy-dev.yml
修改以上配置后,重启服务。
之后在nacos中添加一个新的名为sp-structure-application-tyy-dev.yml的配置文件(注意group和namespace),里面添加一个配置:
conf nac str examphello world
nacos发布后,访问controller的接口,可以正确返回 hello world。
