Java Spring Boot 正确读取配置文件中的属性的值


Posted in Java/Android onApril 20, 2022

前言

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

Java 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"}

总结

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

到此这篇关于Spring Boot 如何正确读取配置文件属性的文章就介绍到这了!

Java/Android 相关文章推荐
详解Java实践之抽象工厂模式
Jun 18 Java/Android
使用feign服务调用添加Header参数
Jun 23 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
java泛型通配符详解
Jul 25 Java/Android
浅谈sql_@SelectProvider及使用注意说明
Aug 04 Java/Android
spring cloud 配置中心native配置方式
Sep 25 Java/Android
Java设计模式之享元模式示例详解
Mar 03 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
Java 获取Word中所有的插入和删除修订的方法
Apr 06 Java/Android
mybatis-plus模糊查询指定字段
Apr 28 Java/Android
Java设计模式中的命令模式
Apr 28 Java/Android
Elasticsearch Recovery 详细介绍
Apr 19 #Java/Android
Elasticsearch 配置详解
Apr 19 #Java/Android
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
解决springboot druid数据库连接失败后一直重连的方法
Apr 19 #Java/Android
Android自定义双向滑动控件
Apr 19 #Java/Android
java高级用法JNA强大的Memory和Pointer
Apr 19 #Java/Android
Java后端 Dubbo retries 超时重试机制的解决方案
Apr 14 #Java/Android
You might like
如何将数据从文本导入到mysql
2006/10/09 PHP
php cookie名使用点号(句号)会被转换
2014/10/23 PHP
CodeIgniter针对数据库的连接、配置及使用方法
2016/03/03 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
js事件(Event)知识整理
2012/10/11 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
使用layui实现的左侧菜单栏以及动态操作tab项方法
2019/09/10 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
python路径的写法及目录的获取方式
2019/12/26 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
python链表类中获取元素实例方法
2021/02/23 Python
HTML5 canvas实现移动端上传头像拖拽裁剪效果
2016/03/14 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
Smallable英国家庭概念店:设计师童装及家居装饰
2017/07/05 全球购物
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
国家励志奖学金获奖感言
2014/01/09 职场文书
小学教师师德反思
2014/02/03 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
医院党员公开承诺书
2014/08/30 职场文书
四风对照检查材料范文
2014/09/27 职场文书
饭店服务员岗位职责
2015/02/09 职场文书
无房证明样本
2015/06/17 职场文书
学校少先队工作总结
2015/08/12 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server