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日

相关文章

  • 详解Java分布式系统中session一致性问题

    详解Java分布式系统中session一致性问题 什么是session一致性问题 在分布式系统中,由于业务系统的扩展和部署,往往会存在多个应用实例,此时用户的请求可能会被路由到不同的应用实例上,而应用实例之间并不共享服务器内存,因此需要在不同的应用实例之间保证Session数据的一致性,即Session共享。如果没有解决Session共享问题,可能会导致用户…

    人工智能概览 2023年5月25日
    00
  • python调用opencv实现猫脸检测功能

    下面是详细的“python调用opencv实现猫脸检测功能”的攻略: 1. 安装OpenCV库 要使用OpenCV库,首先需要安装该库。可以通过以下命令在终端中使用pip安装OpenCV: pip install opencv-python 2. 导入OpenCV库 安装完OpenCV库后,在Python代码中需要导入OpenCV库。这可以通过以下代码实现:…

    人工智能概论 2023年5月25日
    00
  • PyTorch梯度裁剪避免训练loss nan的操作

    PyTorch梯度裁剪是一种用于避免训练过程中出现loss为nan的问题,其通过限制模型的参数梯度范围来提高训练稳定性和收敛效果。以下是PyTorch梯度裁剪的完整攻略: 什么是梯度裁剪 梯度裁剪是一种通过限制参数梯度范围的方法,防止训练过程中出现梯度爆炸或梯度消失的情况。这种现象常常发生在深层神经网络中,尤其是在使用长短时记忆网络(LSTM)等循环神经网络…

    人工智能概论 2023年5月25日
    00
  • 如何通过Django使用本地css/js文件

    使用Django开发web应用时,需要将网页的HTML、CSS和JavaScript等文件组合在一起生成静态网页。本地样式和脚本文件是网页元素的重要组成部分,下面是如何通过Django使用本地CSS/JS的完整攻略。 1. 创建Django项目 首先,创建一个新的Django项目。在命令行中进入自己选择的项目目录,然后执行下面的命令: django-admi…

    人工智能概论 2023年5月25日
    00
  • nginx rewrite功能使用场景分析

    下面为您介绍“nginx rewrite功能使用场景分析”的完整攻略。 什么是nginx rewrite功能 nginx是一款高性能的Web服务器,它还具有重写URL的功能,可以将访问某个URL的请求重定向到其他页面,这就是nginx的rewrite功能。 使用场景分析 重写网址 有时候,我们可能需要修改网址中的某些部分,比如将所有的HTTP网页请求301重…

    人工智能概览 2023年5月25日
    00
  • Python集成开发环境Pycharm的使用及技巧

    Python集成开发环境Pycharm的使用及技巧 Pycharm是一款强大的Python集成开发环境,具有代码自动补全、调试、代码质量检查、版本控制等众多功能,提高了Python程序开发的效率。本文将为大家介绍使用Pycharm的基本操作和一些技巧,帮助大家更好地利用这款工具进行Python程序开发。 1. 安装和配置Pycharm 首先我们需要下载和安装…

    人工智能概览 2023年5月25日
    00
  • 在CentOS下使用Munin来监控服务器运行的方法

    下面是在CentOS下使用Munin来监控服务器运行的完整攻略: 1. 安装Munin Munin是一个开源的监控系统,可以监控服务器的资源使用情况。我们可以通过yum命令来安装Munin: sudo yum install munin munin-node -y 2. 配置Munin Munin的配置文件位于/etc/munin目录下,我们可以在此目录下找…

    人工智能概览 2023年5月25日
    00
  • Django 框架模型操作入门教程

    下面我将为您详细讲解“Django 框架模型操作入门教程”的完整攻略,包括以下内容: Django 模型是什么 Django 模型的创建与编辑 Django 模型的属性与方法 查询 Django 模型数据的相关方法 两个示例说明 1. Django 模型是什么 Django 模型是一种用于定义数据结构的方式,可以帮助开发者快速构建数据库和表格。在 Djang…

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