Spring Boot 如何正确读取配置文件属性

2023-01-21 0 4,205

目录

前言

项目中经常会经常读取配置文件中的属性的值,Spring Boot提供了很多注解读取配置文件属性,那么如何正确使用呢?

Spring Boot 如何正确读取配置文件属性

@Value

@Value用来读取application.yml配置文件中属性的值。

示例代码

application.yml文件中属性:

//定义属性
fileName : test
isFile : false
filePath : c://test

@value读取application.yml属性值:

@Configuration
public class FileConfig
{
    @Value(\"${fileName}\")
    private final String fileName;
    @Value(\"${isFile}\")
    private boolean isFile;
    @Value(\"${filePath}\")
    private static String filePath;
}

测试:

 @Autowired
    private FileConfig fileConfig;
    @GetMapping(\"getFileConfig\")
    public void getFileConfig()
    {
        logger.info(\"fileConfig:{}\",fileConfig);
    }

运行结果:

fileConfig:FileConfig [fileName=, isFile=false, filePath=null]

特别注意:

  • @Value不能将属性值读取静态变量,否则读取的值为空。
  • @Value不能将属性值读取常量,否则读取的值为空。
  • @Value不能读取boolean类型的值,经过测试Spring Boot2.1的版本是无效的,2.2以上版本支持。

所以个人建议非必要情况,尽量少用@Value注解读取属性值。

@ConfigurationProperties

读取配置文件值并且转换成类对象,便于获取值和修改属性值。

示例代码

application.yml文件中属性:

http:
  pool:
    # 连接超时
    connectTimeout: 5000
    #获取连接池中连接超时
    connectionRequestTimeout: 1000
    #每个路由连接数量
    defaultMaxPerRoute: 50
    # /连接池中最大连接数
    maxTotal: 50
    # 服务器返回数据(response)的时间
    socketTimeout: 5000
    #定义不活动的时间(以毫秒为单位),连接回收
    validateAfterInactivity: 30000      

@ConfigurationProperties读取application.yml中以http.pool开头的属性值:

//以http.pool开头
@Component
@ConfigurationProperties(prefix = \"http.pool\")
public class HttpClientConfig implements Serializable
{
    private static final long serialVersionUID = -4608251658338406043L;
    /**
     * 最大连接数
     */
    private Integer maxTotal;
    /**
     * 路由是对最大连接数的细分
     * 每个路由基础的连接数
     */
    private Integer defaultMaxPerRoute;
    /**
     * 连接超时时间
     */
    private Integer connectTimeout;
    /**
     * 从连接池中获取连接的超时时间
     */
    private Integer connectionRequestTimeout;
    /**
     * 服务器返回数据(response)的时间
     */
    private Integer socketTimeout;

测试:

  @GetMapping(\"getHttpClientConfig\")
    public void getHttpClientConfig()
    {
        String json=FastJsonUtil.toJSONString(httpClientConfig);
        logger.info(\"fileConfig:{}\",json);
    }

属性嵌套:

@ConfigurationProperties 可以嵌套List、map、class

config:
  url:http://localhsot:8080
  gaode-map:
    host: https://restapi.amap.com/v3
    key: 1234
@ConfigurationProperties(prefix=\"config\")
public class Config
{
    //高德地图信息
    private GaodeMap gaodeMap;
 }

特别注意:

  • 默认情况不会将实体注入到spring的容器中,需要结合@EnableConfigurationProperties或者@Component一起使用,否则注入对象为空。

@EnableConfigurationProperties

@ConfigurationProperties读取对象注入到spring容器中。例如上述示例也可以采用@EnableConfigurationProperties 来注入

@EnableConfigurationProperties(HttpClientConfig.class)
public class FileController
{
    private Logger logger = LoggerFactory.getLogger(FileController.class);
    @Autowired
    private FileConfig fileConfig;
    @GetMapping(\"getHttpClientConfig\")
    public void getHttpClientConfig()
    {
        String json=FastJsonUtil.toJSONString(httpClientConfig);
        logger.info(\"fileConfig:{}\",json);
    }
  }

@ConfigurationPropertiesScan

用来扫描@ConfigurationProperties实体类并将类注入到Spring容器,上述示例可以如下使用

@ConfigurationPropertiesScan(\"com.xx.fw.config\")
public class FwCoreApplication
{
    public static void main(String[] args)
    {
        SpringApplication.run(FwCoreApplication.class, args);
    }
}

@PropertySource

@PropertySource 主要用于读取指定的配置文件,需要结合@ConfigurationProperties 注解一起使用实现配置文件和Java Bean的注入操作。

示例代码

属性文件user.properteis:

user.id=222
user.name=剑圣
user.age=28

实体类定义:

@Component
@ConfigurationProperties(prefix = \"user\")
@PropertySource(value = {\"classpath:user.properties\"})
public class UserConfig 
{
    private String id;
    private String name;
    private int age;
 }

测试:

    @GetMapping(\"getUserConfig\")
    public void getUserConfig()
    {
        String json=FastJsonUtil.toJSONString(userConfig);
        logger.info(\"userConfig:{}\",json);
    }

输出结果:

c.s.fw.controller.FileController - userConfig:{\"age\":28,\"id\":\"123\",\"name\":\"admin\"}

总结

重点讲解了通过各种注解读取配置文件种属性值,每种方式都是各自的优缺点,项目中一定要统一规范使用,便于项目维护和排查问题。

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Spring Boot 如何正确读取配置文件属性 http://www.20zxx.cn/463059/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务