【Java项目】从0到1完成Nacos配置文件扩展和共享

简介: 【Java项目】从0到1完成Nacos配置文件扩展和共享

使用nacos作用配置中心的好处在于我们可以在云端上修改配置文件之后,使得本地的配置重新生效,从而做到不用重启项目也可以加载新的配置。

环境配置

首先引入依赖,我们知道,SpringBoot的版本和SpringCloud以及SpringCloudAlibaba的版本是有对应关系的,也就是使用对应的关系,能减少bug的出现。

下面配置文件中的前三行我先列出了我的版本。

配置完毕版本之后,首先需要引入Spring-boot-starter-web,否则使用Nacos将会失效。

然后,如果你的项目需要将服务注册到注册中心,那么就需要引入discovery这个依赖,他是服务发现依赖,而如果你不需要进行服务注册,则不需要引入这个依赖。

config这个依赖则是使用nacos的配置中心,所以这个依赖我们需要引入。

<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
        <!-- Spring Boot 的 Spring Web MVC 集成 -->
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
     <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>

配置文件

#微服务配置
spring:
  application:
    name: towelove
  cloud:
    nacos:
      server-addr: 192.168.146.114:8848
      discovery: # 开启服务发现
        namespace: 默认public
        group: 默认为DEFAULT_GROUP
      config: # 开启配置中心
        namespace: 默认public
        group: 默认为DEFAULT_GROUP
        file-extension: yaml # 配置文件类型
        refresh-enabled: true # 开启动态刷新
  #profiles默认为dev
  profiles:
    active: dev

上面的代码比较好理解,spring.application.name是必须的,他代表了这个服务的服务名称,spring.profiles.active就是你的开发环境,比如dev开发,prod生产,test测试环境。

到目前位置我们看上去好像没有映入任何的配置文件对吗?

其实不是的,Nacos默认此时已经去寻找了一个dataId如下的配置文件:

${prefix}-${spring.profiles.active}.${file-extension}

prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,

dataId 的拼接格式变成{prefix}-{file-extension}

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

所以,以上面的为例,此时这个服务一旦启动,就会先去配置中心中查找一个叫做

towelove-dev.yaml的配置文件。如果找到了就加载,没找到就不加载。

到此为止,我们已经简单的完成了一个服务的注册,下面我们讲解一下比较重要的概念。

名称空间和组

我们还需要知道nacos如何去定位一个具体的配置文件,即配置的三要素:namespace、group、dataid.

1、通过namespace、group找到具体的环境和具体的项目。

2、通过dataid找到具体的配置文件,dataid有三部分组成,

比如:towelove-dev.yaml配置文件 由(towelove)-(dev). (yaml)三部分组成

towelove:第一部分,它是在application.yaml中配置的应用名,即spring.application.name的值。

dev:第二部分,它是环境名,通过spring.profiles.active指定,

Yaml: 第三部分,它是配置文件 的后缀,目前nacos支持properties、yaml等格式类型,本项目选择yaml格式类型。

所以,如果我们要配置towelove工程的配置文件:

在开发环境中配置towelove-dev.yaml

在测试环境中配置towelove-test.yaml

在生产环境中配置towelove-prod.yaml

namespace和group

namespace:用于区分环境、比如:开发环境、测试环境、生产环境。

group:用于区分项目,比如:towelove项目、towelove2.0项目

我们可以创建一个名称空间,比如我们创建一个dev开发环境,注意,这里的dataId一定要自己去填写,不然你就得在上面配置文件的地方自己复制过来她随机给你生成的dataId了!!

创建完毕名称空间之后,我们就可以在对应的名称空间下创建配置文件了。

当然,我这个项目并没有用到towelove-dev.yaml这个配置文件,我不太需要。因为我想尽可能确保见面知意。

上面我们已经说过,默认的group和namespace不定义的话,使用的就是DEFAULT_GROUP和默认的这个public这个namespace。当然,对于新手来说这样子最友好。

不过我们也可以简单的配置一下。也不难,如下:

对于group,你填写好你自己设定的group即可,

对于dataId,要注意的是一定要记得自己加上文件的后缀哦,如图。

上面的这张图片表示会选择namespace为dev,并且组为towelove-group的配置文件。

扩展配置

上面我们说过,一个服务启动的时候,默认会去寻找

$ {prefix}-$ {spring.profiles.active}.${file-extension}这个配置文件。

但是,作为SpringCloud项目,我们很可能会需要去引入其他模块的配置文件。

例如我的项目就是,controller层单独放了一个包,也就是提供API接口,而service以及下层,都放在另一个叫做service的包中,这样子,我就可以做到独立开发两个模块的功能了。

那么其实我们知道,controller层不再需要再一次引入mysql的配置,而只需要在service包中引入,因为我们的数据库操作都是在service完成开发和测试的,那么,service包中就会需要用到mysql的配置,而controller在启动的时候也需要。

那么,我们就可以让controller这个包去引入service的服务,同时他也会吧service包的配置文件一起读过来。

那么我们此时就可以让controller这个服务去扩展service的配置文件。

这个时候,只需要在towelove-service-dev.yaml中引入mysql的配置,那么我在做service的接口开发的时候能够成功,controller这个项目他也能成功运行。

共享配置文件

可以在上面的图中看到我用了一个shared-configs,他代表的其实就是多个项目之间都共同使用的一些配置文件。

比如,redis,rocketmq啊这些配置文件,他们都是共享的,那么我就可以使用共享配置文件的方式来引入他们。

这样子我就不需要重复编写配置文件了。

配置文件优先级

刚才说了dataid第一部分就是spring.application.name,nacos 客户端要根据此值确定配置文件 名称,所以spring.application.name不在nacos中配置,而是要在工程的本地进行配置。

本地配置文件现在是application.yaml需要修改为bootstrap.yaml,因为SpringBoot读取配置文件 的顺序如下:

因此,我们如果想要吧服务注册到Nacos,我们需要在bootstrap中配置nacos的地址。

同时,如果说我们的配置文件他们有相同的属性怎么办?谁的优先级更高?

我们引入配置文件的方式有:

1:以项目应用名引入

2:以扩展配置文件方式引入

3:以共享配置文件方式引入

4:本地配置文件

那么这些配置文件的优先级如下:

以项目应用名引入 > 以扩展配置文件方式引入 > 以共享配置文件方式引入 > 本地配置文件

如果本地优先级这么低的话,会让我们如果要启动多个服务的时候,不好修改端口,所以我们可以编写如下配置

spring.cloud.config.override-none=true

也就是关闭覆盖功能,这样子就能使得本地的配置文件不被覆盖


相关文章
|
6月前
|
Java Linux 定位技术
Minecraft配置文件参数说明(JAVA服务器篇)
Minecraft JAVA版服务器启动后会生成server.properties配置文件,位于minecraft_server/根目录下。该文件包含多项关键设置,如游戏模式(gamemode)、最大玩家数(max-players)、难度(difficulty)等。此文档详细说明了各配置项的功能与默认值,帮助用户高效管理服务器环境。
1562 60
|
4月前
|
缓存 安全 Java
【高薪程序员必看】万字长文拆解Java并发编程!(3-1):并发共享问题的解决与分析
活锁:多个线程相互影响对方退出同步代码块的条件而导致线程一直运行的情况。例如,线程1的退出条件是count=5,而线程2和线程3在其代码块中不断地是count进行自增自减的操作,导致线程1永远运行。内存一致性问题:由于JIT即时编译器对缓存的优化和指令重排等造成的内存可见性和有序性问题,可以通过synchronized,volatile,并发集合类等机制来解决。这里的线程安全是指,多个线程调用它们同一个实例的方法时,是线程安全的,但仅仅能保证当前调用的方法是线程安全的,不同方法之间是线程不安全的。
89 0
|
4月前
|
Java 程序员
【高薪程序员必看】万字长文拆解Java并发编程!(3-2):并发共享问题的解决与分析
wait方法和notify方法都是Object类的方法:让当前获取锁的线程进入waiting状态,并进入waitlist队列:让当前获取锁的线程进入waiting状态,并进入waitlist队列,等待n秒后自动唤醒:在waitlist队列中挑一个线程唤醒:唤醒所有在waitlist队列中的线程它们都是之间协作的手段,只有拥有对象锁的线程才能调用这些方法,否则会出现IllegalMonitorStateException异常park方法和unpark方法是LockSupport类中的方法。
92 0
|
Java API Spring
打造未来电商新引擎:揭秘Java可扩展API设计,让支付与物流灵活如丝,引领电商时代潮流!
【8月更文挑战第30天】本文通过电商平台案例,探讨了如何设计可扩展的Java API。首先定义支付和物流服务的接口与抽象类,然后实现具体服务,接着引入工厂模式或依赖注入管理服务实例,最后通过配置实现灵活扩展。这种设计确保了应用架构的灵活性和长期稳定性。
161 3
|
7月前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
789 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
7月前
|
Java
Java中执行命令并使用指定配置文件的最佳实践
通过本文的介绍,您可以了解如何在Java中使用 `ProcessBuilder`执行系统命令,并通过指定配置文件、设置环境变量和重定向输入输出流来控制命令的行为。通过这些最佳实践,可以确保您的Java应用程序在执行系统命令时更加健壮和灵活。
155 7
|
11月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
851 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
11月前
|
缓存 Java 数据库连接
使用 NCache 将 Java 微服务扩展到极致性能
使用 NCache 将 Java 微服务扩展到极致性能
83 8
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
11月前
|
Java Shell Nacos
升级Nacos竟然踩了这种坑?配置文件里的“隐形杀手”!
本文介绍了从Nacos 1.3.0升级到2.3.0的过程及注意事项,涵盖单机与集群模式的升级步骤,特别分享了一次因配置文件中多余空格导致的服务启动失败的经历,提醒读者注意配置细节。
434 0