spring boot 配置文件动态刷新

spring boot 配置文件动态刷新

    • 说明
    • 实现方式
      • 1.建立一个spring boot工程,名称:boot-config,目录如下:
      • 2.引入pom依赖
      • 3.application.yml文件
      • 4.TestController示例
      • 5.测试
        • 1.1启动项目,直接访问:localhost:8080/hello
        • 1.2找到项目编译文件夹,找到配置文件,修改hello的值:
        • 1.3保存文件,访问配置文件刷新接口:http://localhost:8080/actuator/refresh
        • 1.4再次访问:localhost:8080/hello:

说明

动态刷新配置文件的原理来源于spring cloud,cloud五大组件之一的config,分为客户端和服务端,在查看了cloud的配置刷新实现方式之后,因为我现在很少用cloud,所以尝试在boot上面实现配置文件的刷新。

实现方式

1.建立一个spring boot工程,名称:boot-config,目录如下:

spring boot 配置文件动态刷新_第1张图片

2.引入pom依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
		<!--监控配置文件依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

        <!--监控+refresh配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>
    <!-- 引入RefreshScope注解依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

3.application.yml文件

management:
  endpoints:
    web:
      exposure:
        include: refresh #暴露对外刷新接口
hello: 你好!! #用于测试配置文件更新

4.TestController示例

package com.zhouj.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author zj
 * @title: TestController
 * @projectName boot-config
 * @description: TODO
 * @date 2020-08-1215:20
 */
@RestController
@RefreshScope
public class TestController {
	//获取配置文件的值
    @Value("${hello}")
    private String hello;
	//当访问 localhost:8080/hello 时,返回hello
    @GetMapping("/hello")
    public Object test(){
        return hello;
    }
}

5.测试

1.1启动项目,直接访问:localhost:8080/hello

结果:
spring boot 配置文件动态刷新_第2张图片
可以看到,此时,配置文件的 hello是 你好!!

1.2找到项目编译文件夹,找到配置文件,修改hello的值:

spring boot 配置文件动态刷新_第3张图片
spring boot 配置文件动态刷新_第4张图片

1.3保存文件,访问配置文件刷新接口:http://localhost:8080/actuator/refresh

spring boot 配置文件动态刷新_第5张图片
可以看到,此时,有返回信息,提示我们:hello被改变了。

1.4再次访问:localhost:8080/hello:

spring boot 配置文件动态刷新_第6张图片
可以看到,此时打印出的hello已经被重新加载到运行内存里面去了。

你可能感兴趣的:(教程,spring,boot,java)