SpringBoot-读取配置文件方式

前言

Spring Boot提供了多种灵活的方式来读取配置文件,以适应不同的开发和部署需求,SpringBoot启动的时候,读取配置文件的时候,首先获取的是file:/config/文件下的配置文件,也就是项目下config文件里面的配置文件,其次是file:./文件下,项目根目录下,然后是classpath:/config/,最后是classpath:/目录下,一般都使用的是最后一个。
在项目类,有四个地方系统会自动扫描:

  1. file:/config/
  2. file:/
  3. classPath:/config/
  4. classPath:/
  • 其文件生效优先级别,从上到下,即如果在不同路径有相同属性,会优先选择上面的路径属性
  • 路径扫描顺序和其优先级别相反,后面的会覆盖前面的,并且所有路径都会扫描,形成互补

如图所示

一、使用 @ConfigurationProperties 注解读取

在springboot中使用 @ConfigurationProperties(prefix = "") 注解读取配置文件,一般都会指定prefix 前缀属性,例如:@ConfigurationProperties(prefix = "my.app") 就是读取配置文件中 my.app.name,my.app.list等。

代码示例

  • 定义 AppProperties 配置类
java 复制代码
package com.demo.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * 文件名:AppProperties
 * 创建者:
 * 创建时间:2024-08-23
 * 描述: 通过 ConfigurationProperties 注解读取配置文件中前缀是 my.app的配置
 */
@Data
@Component
@ConfigurationProperties(prefix = "my.app")
public class AppProperties {
    //String类型参数配置读取
    private String appName;
    //Properties配置中属性
    private String appProperties;
    //list列表配置对象读取
    private List<AppData> listData;
}
  • 定义list集合 AppData 属性对象
java 复制代码
package com.demo.config;

import lombok.Data;

/**
 * 文件名:AppDataList
 * 创建者:
 * 创建时间:2024-08-23
 * 描述:配置对象
 */
@Data
public class AppData {
    private String dataName;
    private String dataType;
    private String dataPath;
}
  • 定义配置文件属性(application.yml)
XML 复制代码
my:
  app:
    list-data:
      - data-name: test-1
        data-path: www.baidu.com-1
        data-type: type-1

      - data-name: test-2
        data-path: www.baidu.com-2
        data-type: type-2
    app-name: 测试名称
    app-properties: 测试是否覆盖
  • 添加测试接口,通过接口返回配置数据
java 复制代码
package com.demo.config;

import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * 文件名:TestController
 * 创建者:
 * 创建时间:2024-08-23
 * 描述: 测试接口
 */
@RestController
@RequestMapping("/test/")
@Data
public class AppPropertiesController {
    /**
     * 将配置加载对象注入进来
     */
    @Resource
    private AppProperties myAppProperties;

    @GetMapping("app")
    public Object queryCases(){
        Map<String,Object> map = new HashMap<>();
        map.put("code","1");
        map.put("msg","处理成功");
        map.put("data",myAppProperties);
        return map;
    }

}
  • 响应结果

二、使用 @Value 注解读取配置文件

在Spring框架中,@Value注解是一种用于将外部配置值注入到Spring管理的Bean中的声明式方式。@Value注解允许你将配置文件中的值(例如,来自application.properties或application.yml文件)注入到Spring Bean的字段或方法参数中。

代码示例

  • 创建配置对象
java 复制代码
package com.demo.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * 文件名:App
 * 创建者:
 * 创建时间:2024-08-26
 * 描述:通过 @Value 注解获取配置参数
 */
@Component
@Data
public class AppConfig {
    //url
    @Value("${demo.url}")
    private String url;
    //Value方式读取列表
    @Value("${demo.list}")
    private List<String> list;
    //名称
    @Value("${demo.name}")
    private String name;
}
  • 创建接口测试是否读取配置属性
java 复制代码
package com.demo.config;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;

/**
 * 文件名:TestController
 * 创建者:
 * 创建时间:2024-08-23
 * 描述: 测试接口
 */
@RestController
@RequestMapping("/AppConfig/")
@Data
public class AppConfigController {
    /**
     * 将配置加载对象注入进来
     */
    @Resource
    private AppConfig appConfig;

    @GetMapping("appVal")
    public Object queryappVal(){
        Map<String,Object> map = new HashMap<>();
        map.put("code","1");
        map.put("msg","处理成功");
        map.put("data",appConfig);
        return map;
    }
}
  • 调用接口测试结果

三、使用 Environment 类获取配置属性

Environment是Spring Boot中一个非常有用的上下文对象,它为应用程序提供了灵活的环境感知能力,使得配置管理更加高效和动态,Environment主要提供了一种机制来区分开发、测试和生产环境的配置。

  • 代码示例
java 复制代码
package com.demo.config;

import jakarta.annotation.Resource;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 文件名:EnvironmentController
 * 创建者:
 * 创建时间:2024-08-26
 * 描述: 使用Environment对象获取配置属性和环境变量信息
 */
@RestController
@Slf4j
@RequestMapping("/Environment/")
@Data
public class EnvironmentController {
    /**
     * 注入 Environment 对象,使用这个对象可以获取配置文件属性
     */
    @Resource
    private Environment environment;

    @GetMapping("list")
    public Object queryappVal(){
        String demoUrl = environment.getProperty("demo.url");
        String name = environment.getProperty("demo.name");
        //获取list对象列表
        List<String> list =  environment.getProperty("demo.list", List.class);
        Map<String,Object> map = new HashMap<>();
        map.put("demoUrl",demoUrl);
        map.put("name",name);
        map.put("list",list);
        return map;
    }

}
  • 测试结果
相关推荐
让学习成为一种生活方式9 分钟前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画15 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生38 分钟前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink1 小时前
HTTP动词与状态码
java
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
计算机-秋大田1 小时前
基于Spring Boot的船舶监造系统的设计与实现,LW+源码+讲解
java·论文阅读·spring boot·后端·vue
神里大人1 小时前
idea、pycharm等软件的文件名红色怎么变绿色
java·pycharm·intellij-idea
小冉在学习2 小时前
day53 图论章节刷题Part05(并查集理论基础、寻找存在的路径)
java·算法·图论
代码之光_19802 小时前
保障性住房管理:SpringBoot技术优势分析
java·spring boot·后端