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

yizhihongxing

下面就详细讲解“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日

相关文章

  • Mongoose经常返回e11000 error的原因分析

    下面是详细讲解“Mongoose经常返回e11000 error的原因分析”的完整攻略。 什么是 Mongoose 的 E11000 错误? 当使用 Mongoose 进行数据库操作,如插入文档时,如果违反了唯一索引的约束条件,Mongoose 会返回一个 E11000 错误。具体的错误消息通常是这样的: { MongoError: E11000 dupli…

    人工智能概论 2023年5月25日
    00
  • SpringCloud Config配置中心原理以及环境切换方式

    一、Spring Cloud Config配置中心原理简介 Spring Cloud Config是一个基于Spring Boot的配置管理工具,它提供集中的外部配置管理解决方案。通过Spring Cloud Config,我们可以将应用程序的配置中心独立出来,不必被绑定到特定的开发、测试、生产环境,这样我们就能够将配置独立存储并管理,方便随时更新,做到配置…

    人工智能概览 2023年5月25日
    00
  • mongodb禁止外网访问及添加账号的操作方法

    下面是详细的攻略: MongoDB禁止外网访问及添加账号的操作方法 1. 禁止外网访问 在MongoDB中,有一个bindIp参数控制哪些IP地址可以访问MongoDB实例。默认情况下,bindIp值为0.0.0.0,表示可以从任何IP地址访问MongoDB。为了禁止外网访问,可以将bindIp值设置为127.0.0.1,表示只能从本地IP地址访问Mongo…

    人工智能概论 2023年5月25日
    00
  • pytorch方法测试详解——归一化(BatchNorm2d)

    PyTorch方法测试详解——归一化(BatchNorm2d) 在深度学习中,数据归一化是一个非常重要的步骤。BatchNorm2d是PyTorch中用来做归一化的方法。下面将详细讲解BatchNorm2d的使用方法。 1. BatchNorm2d的使用方法 BatchNorm2d的主要作用是对数据进行归一化处理。在PyTorch中,使用BatchNorm2…

    人工智能概论 2023年5月25日
    00
  • 聊一聊SpringBoot服务监控机制

    我来为你详细讲解“聊一聊SpringBoot服务监控机制”的完整攻略。首先,我们需要了解Spring Boot中的监控机制是什么。在使用Spring Boot进行开发时,我们经常需要监控服务的运行情况,包括对应用程序的性能、健康状况以及运维诊断等等。Spring Boot提供了多种监控机制,主要包括:Actuator、Dropwizard Metrics等。…

    人工智能概览 2023年5月25日
    00
  • JavaScript实现的内存数据库LokiJS介绍和入门实例

    JavaScript实现的内存数据库LokiJS介绍和入门实例 什么是LokiJS? LokiJS是一个轻量的、JavaScript实现的内存数据库,它提供了类似于MongoDB的文档数据库的数据存储、查询和修改功能,但是在内存中运行,不需要安装和配置数据库软件,在浏览器和Node.js环境中都可以运行。 LokiJS提供了非常简单的API,使得开发者可以很…

    人工智能概论 2023年5月25日
    00
  • Django 解决新建表删除后无法重新创建等问题

    下面是基于Django的解决新建表删除后无法重新创建等问题的完整攻略。 问题描述 在使用Django开发时,有时候我们会遇到新建数据表之后,再次删除数据表时会出现无法重新创建数据表的情况。 这种情况通常出现在我们删除数据表之后,模型元数据表中仍然保留着该数据表的记录。如果我们重新创建同名数据表,Django会发现元数据表中已经保存了同名数据表的信息,进而拒绝…

    人工智能概论 2023年5月25日
    00
  • 高质量Python代码编写的5个优化技巧

    当编写Python代码时,有许多可以提高其质量和性能的技巧。下面是五个优化技巧的攻略,您可以使用这些技巧优化您的Python代码。 1. 使用生成器 生成器可以在内存方面更具优势。在使用可迭代对象时,它们允许您逐个地生成值,而不是将它们全部加载到内存中。例如,以下代码通过使用生成器计算了一个列表中所有数字的总和: def sum_list(numbers):…

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