SpringBoot项目集成nacos,并启动报错Failed to configure a DataSource: ‘url‘

举报
小小张自由--张有博 发表于 2021/11/20 15:39:28 2021/11/20
【摘要】 本文详细介绍了nacos,常用的nacos的名词。springboot项目集成nacos的全过程,并从多个角度解决启动报错 Failed to configure a DataSource: ‘url‘ attribute is not speci

目录

一、Nacos简介:

常用名词:

命名空间

配置集 ID

服务名

服务注册中心

服务发现

二、配置过程

1.首先在nacos上创建一个新的命名空间

2.配置列表选中新建的命名空间,添加配置项

3.在工程POM中引入依赖,添加bootstrap.yml文件(将原来的application文件删掉)

三、解决问题

1.查看本地是否有依赖,项目启动会从nacos拉依赖,当本地没有时,那就是依赖没拉下来,当然启不动

2.核对url的配置信息是否正确,格式是否正确

3.仔细核对服务器地址是否正确,命名空间是否正确,配置是否正确。

四、集成成功,总结问题

1.启动项目可以在服务列表看到有了一个服务实例。


2.我出现这个问题的原因是因为问题三,命名空间的地址没有写对,导致依赖没有拉下来,所以记录一下。

3.application与boostrape文件的区别


一、Nacos简介:

官方地址奉上:什么是 Nacos,对于Nacos的简介官方说的很清楚,我说一下自己的理解。nacos常被我们称之为注册中心、配置中心。

何为注册中心:就是一个微服务项目中,其中有很多服务共同做一件事情,他们之间如何协作,如何管理,这里可以用到注册中心,当服务(Service)启动时,将自己的一个实例,注册到注册中心上,注册中心可以做服务发现,服务健康监测,心跳机制,正是由于服务启动后都注册到注册中心,所以注册中心也会做负载均衡的策略。

何为配置中心:正常的一个微服务项目都会有一个自己的配置文件(application),在这里可以配置服务的端口号、数据库地址等等。当程序启动时会,加载读取配置文件中的信息。当有多个服务时,我们可以将配置文件(application)放到远端,将项目中每个服务的配置放到一起,统一管理,动态配置等。


常用名词:

命名空间

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

配置集 ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

服务名

服务提供的标识,通过该标识可以唯一确定其指代的服务。

服务注册中心

存储服务实例和服务负载均衡策略的数据库。

服务发现

在计算机网络上,(通常使用服务名)对服务下的实例的地址和元数据进行探测,并以预先定义的接口提供给客户端进行查询。


二、配置过程

1.首先在nacos上创建一个新的命名空间

image.png

名称可以按照大家默认的规范(项目名—环境),例如video-dev,video-test,video-prod

2.配置列表选中新建的命名空间,添加配置项

image.png

可将本地的配置文件,粘贴到配置内容中,格式可选yaml,Data ID建议起名为video.yml(服务名.yml)


image.png

3.在工程POM中引入依赖,添加bootstrap.yml文件(将原来的application文件删掉)

 <properties>
        <java.version>1.8</java.version>
        <spring.cloud.version>2.1.0.RELEASE</spring.cloud.version>
 </properties>

 <dependencies>

        <!-- nacos服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>
        <!--nacos配置中心来做配置管理-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>

    <dependencies>

Bootstrap中的配置项

image.png

到此就配置完毕了,开始启动吧


三、解决问题

启动的时候发现报错了,出现问题就要解决,解决问题的思路如下。

image.png


1.查看本地是否有依赖,项目启动会从nacos拉依赖,当本地没有时,那就是依赖没拉下来,当然启不动

image.png

当这里有刚才新建的命名空间,那就证明依赖拉下来了,仔细检查配置项的格式、配置项的内容

当这里没有刚才新建的命名空间,那就证明依赖没拉下来了,那就需要检查Bootstrap.yml文件中的服务器地址是否正确,命名空间是否正确,配置是否正确。

2.核对url的配置信息是否正确,格式是否正确

按照报错信息进行修改,仔细核对配置中的配置项是否正确,格式是否正确

配置中“:”后要有空格。

topic: 5
practice: 42
questionnaire: 14
signin: 2

3.仔细核对服务器地址是否正确,命名空间是否正确,配置是否正确。

仔细核对服务器地址是否正确,命名空间是否正确,配置是否正确。

仔细核对服务器地址是否正确,命名空间是否正确,配置是否正确。

重要的事情说三遍!!!

image.png


四、集成成功,总结问题

1.启动项目可以在服务列表看到有了一个服务实例。

image.png

2.我出现这个问题的原因是因为问题三,命名空间的地址没有写对,导致依赖没有拉下来,所以记录一下。

3.application与boostrape文件的区别

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。

bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

boostrap 由父 ApplicationContext 加载,比 applicaton 优先加载

boostrap 里面的属性不能被覆盖

如果本篇博客对您有一定的帮助,大家记得留言+点赞+收藏哦。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。