前言:
当前小伙伴们对“微服务nacos找不到数据源”都比较注重,我们都需要学习一些“微服务nacos找不到数据源”的相关文章。那么小编同时在网络上收集了一些有关“微服务nacos找不到数据源””的相关知识,希望我们能喜欢,大家快快来了解一下吧!我们在开发spring boot web项目时,项目的配置信息(这里以数据源为例)通常会放在application.properties文件中。
如果你非得给我争:“也可以放在application.yml文件中啊”,我只能回你四个字:“你个杠精”。
当项目配置信息需要变动(比如数据库连接用户名、密码需要修改)时,我们的操作步骤一般是:
修改application.properties文件中的项目配置信息;为了使修改后的配置信息生效,我们需要重启项目。
如果我们使用微服务架构,我们的项目通常是由多个子项目组成。如果这些子项目的配置信息都需要修改,那我们就要逐个项目修改了。
逐个修改!看到“逐个”我想你已经不乐意了。
“我就想改一个”
好,我们就改一个。
Nacos配置管理官方文档说明:
Nacos 真正将配置从应用中剥离出来,统一管理,优雅地解决了配置的动态变更、持久化、运维成本等问题。
通俗地讲,Nacos的配置管理功能的作用就是当需要修改项目配置信息时,我们只需要修改一处,所有的项目就都生效了。这功能绝对Nice!
下面我们就写个示例程序讲述spring cloud项目整合nacos实现配置管理功能。
首先,我们的一个先决条件,我们需要安装好Nacos。
本篇文章是通过Docker安装的Nacos。
拉取镜像
docker pull nacos/nacos-server启动容器
docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server
standalone代表着单机模式运行。
登录
访问地址: 用户名:nacos 密码:nacos
在配置管理 --> 配置列表页面创建一个新的配置,配置信息如下:
DataId:learn-springboot-nacos-dev.yamlGroup:dev配置格式:YAML
DataId的格式:${prefix}-${spring.profile.active}.${file-extension}。
${prefix}的值默认为spring.application.name,也可以通过配置项spring.cloud.nacos.config.prefix配置。
${spring.profile.active}为当前环境对应的profile。当spring.profile.active值为空时,对应的连接符-也就没有了,即DataId的格式就成了${prefix}.${file-extension}。
${file-extension}各配置文件的扩展名,可以通过配置项spring.cloud.nacos.config.file-extension配置。
Group也就是分组。我所接触的项目大体是通过环境进行划分的。比如:dev、uat、test、prod。
配置内容输入如下内容:
name: how are you?
二、创建一个Maven项目
添加如下依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2021.1</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>创建Spring Boot项目启动类
就是一个非常标准、非常普通的Spring Boot项目启动类。代码我不想贴了。相信你能理解的。
创建项目配置文件 —— bootstrap.yml
server: port: 9944spring: application: name: learn-springboot-nacos cloud: nacos: config: file-extension: yaml group: ${spring.profiles.active} prefix: ${spring.application.name} server-addr: 127.0.0.1:8848 profiles: active: dev
这里配置的nacos配置信息与在Nacos管理后台新增的配置信息要对应的。
创建一个测试控制器
@RefreshScope@RestControllerpublic class HelloController { @Value("${name}") private String name; @GetMapping public String index() { return name; }}
很简单的控制器,就是注入下在Nacos中增加的配置内容中的属性,然后直接返回。
一切准备就绪,启动项目。不出意外的话这里要出问题了。
启动项目,控制台输出如下错误信息:
Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'name' in value "${name}"
Why?
为什么@Value无法绑定配置?
我所有的步骤都是参考官网一步一步来的啊,怎么会出错了呢?
正当我毫无头绪,无比困惑,准备放弃时,最后一次Google却找到了处理办法。
这是我Google的关键字:spring cloud alibaba nacos @Value 无法绑定配置。
这是在Github已经关闭的一个问题:。
解决办法是添加如下依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.1.3</version></dependency>
添加完依赖后,我们再次启动项目。这次没有意外了。大功告成。
我们访问下看到显示的是how are you?。
然后我们去Nacos配置管理中修改配置,修改后的配置内容如下:
name: I'm fine.
刷新页面(),看到的是不是就是I'm fine.了。
码字不易,如果觉得写得还凑合,还请帮忙点个赞。
标签: #微服务nacos找不到数据源