专栏首页Java深度编程SpringBoolt框架获取properties配置文件值的三种方式

SpringBoolt框架获取properties配置文件值的三种方式

前言:

Spring框架是主流框架,使用过程中经常需要在properties配置文件中配置数值,而有时候又需要在代码中获取其值。下面就为大家介绍获取配置值的三种方式:

第一种方式:使用注解@Value("属性名")

代码:

@Value("${jcpt.domain}")
private String domain; //基础平台域名

易错点:如果变量名被static修饰,是无法注入值的:

@Value("${jcpt.domain}") //被static修饰的变量无法注入值
private static String domain; //基础平台域名

解决办法: 将注解转移到set方法上:

public class A {

  private static String domain; //基础平台域名

  @Value("${jcpt.domain}")
   public void setDomain(String domain) {
        A.domain = domain;
   }
}

但是要注意的是:“如果set方法也被statis修饰的话,也是无法注入值的!”

第二种方式:

使用注解@ConfigurationProperties(prefix = "属性名")

该方式是通过反射将值映射到bean,从而实现赋值。

代码:

properties配置文件:

###第三方跳转是否走基础数据平台验证的开关
es.security.common.isBoolean = false
//注意配置文件的属性名必须是 “注入的属性名.” + "对象名." + "对象属性名“

java类:

@ConfigurationProperties(prefix = "es.security")
public class SecurityMainProperties {
    /**
     * 通用属性配置
     */
    private CommonProperties common = new CommonProperties();
    //get ,set ……
    }

CommonProperties类:

public class CommonProperties {

    private boolean isBoolean=true;
    //get,set ……
}

原理:

1.首先@ConfigurationProperties中指明了配置未见的路径“es.security”也就表名了这个类下的属性要匹配properties配置文件中带有es.security前缀的值;

2.SecurityMainProperties 类中有CommonProperties的对象属性,属性名叫common,这个变量名正好对应“es.security.common”,而common是个对象,所以继续向下映射CommonProperties类下的isBoolean属性,这个属性整对应了完整的配置文件中的“es.security.common.isBoolean”。

第三种方式(不推荐):读取配置文件,再解析

我们可以采用IO流先将配置文件只能够的值全部读取出来,再进行匹配

StringBuffer buffer = new StringBuffer();
//获取资源模版文件
File sources= ResourceUtils.getFile("classpath:keyWord.txt");
BufferedReader bf = new BufferedReader(new FileReader(sources));
String s ;
while((s = bf.readLine())!=null){
    buffer.append(s.trim());
}

通过以上的代码能够将配置文件的所有值连接成字符串,再进行解析即可。此方式较为愚蠢,不建议使用。此方式只适合获取配置文件的全部值,若取局部值建议使用前两种方式。

本文分享自微信公众号 - Java深度编程(JavaDeep),作者:龚文学

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javaScript中的最顶层的对象Object

    javaScript沿袭了java的规则,也设计了一个最顶层的“父类”对象Object,所有的对象都默认继承Object,所有对象都可以视为Object的实例...

    Java深度编程
  • springBoot整合Mq报错:JmsMessagingTemplate that could not be found

    springBoot使用gradle版本管理,在整合activeMQ的时候容易出现一个错误,那就是找不到JmsMessagingTemplate,无法匹Mess...

    Java深度编程
  • javaScript的Math数学对象 --用法大全

    Math是 JavaScript 的原生对象,提供各种数学功能。该对象不是构造函数,不能生成实例,所有的属性和方法都必须在Math对象上调用。简而言之就如...

    Java深度编程
  • 基础知识 | 每日一练(197)

    c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取...

    闫小林
  • 设计模式—— 六:开闭原则

    在开发软件的过程中,因为变化 、升级和维护等原因需要对软件原有的代码进行修改,可能会将错误引入原本已经测试过的旧代码中,破坏原有的系统,因此,当软件需求变化时,...

    三分恶
  • 看完你就应该能明白的悲观锁和乐观锁

    Java 按照锁的实现分为乐观锁和悲观锁,乐观锁和悲观锁并不是一种真实存在的锁,而是一种设计思想,乐观锁和悲观锁对于理解 Java 多线程和数据库来说至关重要,...

    JAVA葵花宝典
  • 信号的产生

    信号是表示消息的物理量,如电信号可以通过幅度、频率、相位的变化来表示不同的消息。这种电信号有模拟信号和数字信号两类。信号是运载消息的工具,是消息的载体。从广义上...

    FPGA开源工作室
  • 看完你就应该能明白的悲观锁和乐观锁

    Java 按照锁的实现分为乐观锁和悲观锁,乐观锁和悲观锁并不是一种真实存在的锁,而是一种设计思想,乐观锁和悲观锁对于理解 Java 多线程和数据库来说至关重要,...

    cxuan
  • 【答疑解惑】SD卡的来龙去脉

    SD(Secure Digital)与 MMC(Multimedia Card) SD 是一种 flash memory card 的标准,也就是一般常见的 S...

    程序员互动联盟
  • jQuery数据结构渲染(3):文本和input/textarea框赋值

    王小婷

扫码关注云+社区

领取腾讯云代金券