spring boot项目中如何使用nacos作为配置中心

下面就详细讲解“spring boot项目中如何使用nacos作为配置中心”的完整攻略。

什么是Nacos

Nacos是一个基于DNS和HTTP的动态服务发现、配置管理和服务管理平台,致力于帮助用户更好的构建、演进、治理微服务生态系统。Nacos提供了服务发现、配置管理、动态DNS服务以及数据共享和元数据管理等基础设施功能。

在Spring Boot项目中集成Nacos

接下来介绍如何在Spring Boot项目中使用Nacos作为配置中心。

1. 引入依赖

pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2. 配置Nacos地址

application.propertiesapplication.yaml 文件中配置Nacos Server地址:

spring.cloud.nacos.config.server-addr=nacos服务器地址

3. 创建配置文件

在Nacos Server的配置管理模块中,创建一个名为 example.yml 的yml格式配置文件,内容如下:

user:
  name: "Alice"
  age: 18

4. 加载配置

创建一个配置类 NacosConfig,使用 @RefreshScope 注解实现动态刷新配置,代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

@Component
@RefreshScope
public class NacosConfig {

    @Value("${user.name}")
    private String userName;

    @Value("${user.age}")
    private int userAge;

    // getter and setter
}

5. 测试获取配置

RestController 中测试获取配置,代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @Autowired
    private NacosConfig nacosConfig;

    @GetMapping("/user")
    public String getUser() {
        return "name: " + nacosConfig.getUserName() + ", age: " + nacosConfig.getUserAge();
    }
}

访问 http://localhost:8080/user ,可以看到返回结果为:

name: Alice, age: 18

6. 动态刷新配置

修改Nacos配置文件内容,例如将年龄改为20,保存并发布,然后调用接口 http://localhost:8080/actuator/refresh 刷新配置。

重新调用接口 http://localhost:8080/user,可以看到返回结果为:

name: Alice, age: 20

至此,Spring Boot项目就成功集成了Nacos作为配置中心。

示例说明

下面举两个使用Nacos作为配置中心的示例:

示例一 - 使用Nacos作为Spring Cloud Gateway网关的配置中心

  1. 引入依赖:
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 配置Nacos Server地址:
spring.cloud.nacos.config.server-addr=nacos服务器地址
  1. 创建一个 gateway.yaml 配置文件,内容如下:
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
        uri: http://localhost:8081
        predicates:
            - Path=/user/**
        filters:
            - StripPrefix=1
  1. GatewayConfig 类中加载 gateway.yaml 文件,代码如下:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.cloud.gateway.route.builder.routes.RouteLocatorBuilder;
import org.springframework.cloud.gateway.route.builder.routes.SimpleRouteBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.ClassPathResource;

@Configuration
public class GatewayConfig {

    @Autowired
    private NacosConfig nacosConfig;

    @Bean
    @Primary
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        SimpleRouteBuilder routeBuilder = builder.routes();
        ClassPathResource resource = new ClassPathResource("gateway.yaml");
        Properties properties = new Properties();
        try {
            properties.load(resource.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (String key : properties.stringPropertyNames()) {
            String value = properties.getProperty(key);
            routeBuilder.route(key, r -> r.path(key).uri(value));
        }
        return routeBuilder.build();
    }
}

示例二 - 将Nacos配置注入到Spring Boot的Environment中

  1. 引入依赖:
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
  1. 配置Nacos Server地址:
spring.cloud.nacos.config.server-addr=nacos服务器地址
  1. 创建一个 example.yaml 配置文件,内容如下:
greeting: "Hello world!"
  1. @SpringBootApplication 中添加 @EnableConfigurationProperties 注解:
@EnableConfigurationProperties
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  1. application.propertiesapplication.yaml 中添加以下配置:
spring.main.allow-bean-definition-overriding=true
  1. NacosConfig 中添加以下代码:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

@Configuration
@ConfigurationProperties(prefix = "example")
@RefreshScope
public class NacosConfig {
    private String greeting;

    public String getGreeting() {
        return greeting;
    }

    public void setGreeting(String greeting) {
        this.greeting = greeting;
    }
}
  1. SpringBootApplication 中添加以下代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class Application {

    @Autowired
    private Environment environment;

    @Autowired
    private NacosConfig nacosConfig;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    ApplicationRunner applicationRunner() {
        return args -> {
            System.out.println("================================");
            System.out.println("Greeting from application.yml:");
            System.out.println(environment.getProperty("example.greeting"));
            System.out.println("Greeting from Nacos:");
            System.out.println(nacosConfig.getGreeting());
            System.out.println("================================");
        };
    }
}

使用以上示例,就可以将Nacos的配置注入到Spring Boot的Environment中了。

希望以上内容能帮助您快速上手在Spring Boot项目中使用Nacos作为配置中心。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot项目中如何使用nacos作为配置中心 - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • Python3 Click模块的使用方法详解

    Python3 Click模块的使用方法详解 简介 Click是一个Python模块,提供命令行解析器的支持。它是使用Python编写的,非常简单易用。它支持参数解析、子命令、自动帮助文档生成等功能,可以让您快速构建一个易用又好看的命令行工具。 安装与使用 在终端中输入以下命令即可安装Click模块: pip3 install click 引入Click模块…

    人工智能概览 2023年5月25日
    00
  • 关于Yii2框架跑脚本时内存泄漏问题的分析与解决

    下面我将详细讲解“关于Yii2框架跑脚本时内存泄漏问题的分析与解决”的完整攻略。 前言 在使用Yii2框架开发的过程中,我们时常需要编写一些脚本程序来完成一些自动化操作。但是,在运行这些脚本程序的过程中,我们可能会遇到内存泄漏问题,这将会导致脚本程序越运行越慢,最终导致程序奔溃。因此,本文将对Yii2框架中跑脚本时出现的内存泄漏问题进行分析,并提供解决方案。…

    人工智能概论 2023年5月25日
    00
  • C++ OpenCV模拟实现微信跳一跳

    C++ OpenCV模拟实现微信跳一跳的完整攻略如下所示: 1. 简介 微信跳一跳是一款非常受欢迎的小游戏,本文将介绍如何使用C++和OpenCV模拟实现微信跳一跳。 2. 实现步骤 2.1. 准备工作 在开始实现之前,我们需要进行一些准备工作: 安装OpenCV和C++编译器。 下载微信跳一跳游戏。 使用Android手机进行游戏,并且将游戏跳一跳的画面通…

    人工智能概论 2023年5月24日
    00
  • 解决C语言中使用scanf连续输入两个字符类型的问题

    要解决C语言中使用scanf连续输入两个字符类型的问题,可以采用以下攻略: 1.使用空格分开输入 可在两个字符之间输入空格,使得能够采用两次scanf分别输入两个字符,例如: char a, b; scanf("%c %c", &a, &b); printf("a=%c, b=%c", a, b); 这…

    人工智能概览 2023年5月25日
    00
  • 基于pytorch 预训练的词向量用法详解

    基于PyTorch预训练的词向量用法详解 简介 词向量是自然语言处理(NLP)领域中非常有用的一种技术,它可以将单词转换为向量,从而方便计算机进行处理。在PyTorch中,我们可以使用预训练的词向量,而不必从头开始训练。本文将介绍如何使用PyTorch预训练的词向量。 步骤 下载预训练的词向量 首先,我们需要从官方网站中下载要使用的预训练词向量。 加载预训练…

    人工智能概论 2023年5月25日
    00
  • 树莓派64位系统安装libjasper-dev显示无法定位软件包问题

    以下是针对“树莓派64位系统安装libjasper-dev显示无法定位软件包问题”的完整攻略。 问题背景 在安装树莓派64位系统时,可能会遇到需要安装libjasper-dev软件包的情况,但是在执行安装命令时会提示“无法定位软件包”的错误信息。 解决方案 方案一:添加软件源后更新 可以尝试先添加armhf架构软件源,并更新软件包列表,再尝试安装libjas…

    人工智能概览 2023年5月25日
    00
  • django项目中使用手机号登录的实例代码

    下面是详细的攻略。 1. 安装依赖库 首先需要安装 django、django-rest-framework 和 django-rest-framework-simplejwt 这三个库。可以通过以下命令进行安装: pip install django django-rest-framework django-rest-framework-simplejwt…

    人工智能概论 2023年5月25日
    00
  • Kubernetes中Nginx服务启动失败排查流程分析(Error: ImagePullBackOff)

    针对”Kubernetes中Nginx服务启动失败排查流程分析(Error: ImagePullBackOff)”的问题,我们可以从以下几个方面入手进行排查: 1. 查看容器镜像 $ kubectl describe pod <pod-name> | grep -i image 首先,我们需要确认容器镜像是否存在、是否正确或从私有镜像仓库能否拉取…

    人工智能概览 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部