Spring Boot读取properties配置文件中的数据

2023-10-26

Spring Boot 专栏:https://blog.csdn.net/dkbnull/category_9278145.html

Spring Cloud 专栏:https://blog.csdn.net/dkbnull/category_9287932.html

GitHub:https://github.com/dkbnull/SpringBootDemo

Gitee:https://gitee.com/dkbnull/SpringBootDemo

Spring Boot最常用的3种读取properties配置文件中数据的方法:

1、使用@Value注解读取

读取properties配置文件时,默认读取的是application.properties。

application.properties:

demo.name=Name
demo.age=18

Java代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GatewayController {

    @Value("${demo.name}")
    private String name;

    @Value("${demo.age}")
    private String age;

    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                //1、使用@Value注解读取
                " name=" + name +
                " , age=" + age;
    }
}

运行结果如下:

这里,如果要把

 @Value("${demo.name}")
            
private String name;
            
@Value("${demo.age}")
            
private String age;

部分放到一个单独的类A中进行读取,然后在类B中调用,则要把类A增加@Component注解,并在类B中使用@Autowired自动装配类A,代码如下。

类A:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class ConfigBeanValue {

    @Value("${demo.name}")
    public String name;

    @Value("${demo.age}")
    public String age;
}

类B:

import cn.wbnull.springbootdemo.config.ConfigBeanValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GatewayController {

    @Autowired
    private ConfigBeanValue configBeanValue;

    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                //1、使用@Value注解读取
                " name=" + configBeanValue.name +
                " , age=" + configBeanValue.age;
    }
}

运行结果如下:

注意:如果@Value${}所包含的键名在application.properties配置文件中不存在的话,会抛出异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configBeanValue': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'demo.name' in value "${demo.name}"

2、使用Environment读取

application.properties:

demo.sex=男
demo.address=山东

Java代码:

import cn.wbnull.springbootdemo.config.ConfigBeanValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GatewayController {

    @Autowired
    private ConfigBeanValue configBeanValue;

    @Autowired
    private Environment environment;

    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                //1、使用@Value注解读取
                " name=" + configBeanValue.name +
                " , age=" + configBeanValue.age +
                "<p>get properties value by ''Environment'' :" +
                //2、使用Environment读取
                " , sex=" + environment.getProperty("demo.sex") +
                " , address=" + environment.getProperty("demo.address");
    }
}

运行,发现中文乱码:

这里,我们在application.properties做如下配置:

server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

然后修改IntelliJ IDEA,File --> Settings --> Editor --> File Encodings ,将最下方Default encoding for properties files设置为UTF-8,并勾选Transparent native-to-ascii conversion。

重新运行结果如下:

3、使用@ConfigurationProperties注解读取

在实际项目中,当项目需要注入的变量值很多时,上述所述的两种方法工作量会变得比较大,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联在一起,即使用注解@ConfigurationProperties读取配置文件数据。

在src\main\resources下新建config.properties配置文件:

demo.phone=10086
demo.wife=self

创建ConfigBeanProp并注入config.properties中的值:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = "config.properties")
public class ConfigBeanProp {

    private String phone;

    private String wife;

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getWife() {
        return wife;
    }

    public void setWife(String wife) {
        this.wife = wife;
    }
}

@Component 表示将该类标识为Bean

@ConfigurationProperties(prefix = "demo")用于绑定属性,其中prefix表示所绑定的属性的前缀。

@PropertySource(value = "config.properties")表示配置文件路径。

使用时,先使用@Autowired自动装载ConfigBeanProp,然后再进行取值,示例如下:

import cn.wbnull.springbootdemo.config.ConfigBeanProp;
import cn.wbnull.springbootdemo.config.ConfigBeanValue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GatewayController {

    @Autowired
    private ConfigBeanValue configBeanValue;

    @Autowired
    private Environment environment;

    @Autowired
    private ConfigBeanProp configBeanProp;

    @RequestMapping(value = "/gateway")
    public String gateway() {
        return "get properties value by ''@Value'' :" +
                //1、使用@Value注解读取
                " name=" + configBeanValue.name +
                " , age=" + configBeanValue.age +
                "<p>get properties value by ''Environment'' :" +
                //2、使用Environment读取
                " sex=" + environment.getProperty("demo.sex") +
                " , address=" + environment.getProperty("demo.address") +
                "<p>get properties value by ''@ConfigurationProperties'' :" +
                //3、使用@ConfigurationProperties注解读取
                " phone=" + configBeanProp.getPhone() +
                " , wife=" + configBeanProp.getWife();
    }
}

运行结果如下:

GitHub:GitHub - dkbnull/SpringBootDemo: SpringBootDemo

微信:Spring Boot入门:读取properties配置文件中的数据

微博:Sina Visitor System

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot读取properties配置文件中的数据 的相关文章

随机推荐

  • java unreachable code不可达代码

    例子 static int test int testval int target 1 if testval gt target System out println 1 return 1 下边是永远不会达到的代码 所以编译器提示错误 un
  • 【Docker】配置容器的hosts来实现域名指定服务

    需求 在使用docker chrome进行selenium自动化测试的时候 希望客户端能够通过某种形式 让我们的case跑到测试环境取 这时候有两个方式 1 给浏览器使用代理 这里不讲 前面有个文章已经说过了 2 修改执行的selenium
  • pyqt_点击button("添加")弹出新的页面

    目标 通过点击主窗口中的button弹出另一个窗口页面 首先需要注意的是 两个窗口不能是同一类型 否则会崩溃 并保存为名称不同的ui文件 并使用UIC工具转成 py文件 因此在目前文件夹中既有mainwindow又有dialog窗体形式的界
  • openstack-keystone入门

    作用 身份验证 令牌发放和校验 服务列表 用户权限定义 不适合新手看 想到哪儿写到哪儿 写一些关于自己在看书学习的过程中对一些知识的理解 Service决定每个Role能干什么事情 而每个User可以给他分配多个Role 进而具备了多服务的
  • 【yolo】yolo的txt标签转VOC格式的xml标签

    脚本介绍 1 可以为原图提供自动标注的功能 例如 需要标注10000 的数据 可以人工标注1000 然后训练yolo模型 再用detect py用模型对剩下来的原图进行推理 推理中保存txt格式的推理结果 然后可以采用本代码 对剩下来的原图
  • 【Linux】基本指令(三)

    目录 一 head指令 二 tail指令 三 date指令 3 1显示时间 3 2时间戳 四 cal指令 五 find指令 六 grep指令 七 zip unzip指令 一 head指令 head英文意思是头部 顾名思义 head就是显示文
  • 刷脸支付重磅来袭是业界的口碑代表

    近两年来 刷脸支付发展如火如荼 宁波 长沙等多个城市相继开展线下刷脸支付试点 建设银在其网点的ATM机推出刷脸取款 光大银也将人脸识别应用于账户登陆 转账 线上融资等场景 支付宝 财付通等第三方支付公司也争相推出刷脸支付设备 随着移动支付的
  • [Event] Linux con Japan 2015

    日本每年都举办一次LinuxCon 下面是今年的 Event 及对应的 ppt http events linuxfoundation jp events linuxcon japan 粗粗看了一下 竟然还有这么一个主题 How China
  • C程序设计的抽象思维-递归过程-砝码称重

    问题 在狄更斯时代 商人们用砝码和天平来称量商品的重量 假设你仅仅有几个砝码 就仅仅能精确地称出一定的重量 比如 假定仅仅有两个砝码 各自是1kg和3kg 仅仅用1kg的砝码能够称出1kg重量的商品 仅仅用3kg的砝码能够称出3kg重量的商
  • 关于typescript的数据类型的那一些事~

    以下介绍typeScript的几种数据类型 分别是Boolean number string array object any 1 ts中boolean的使用 var boolean Boolean boolean true console
  • 金蝶客户端显示服务器不是有效的,金蝶 服务器不是有效的 请重新设置

    金蝶 服务器不是有效的 请重新设置 内容精选 换一换 Web服务端证书用于客户端浏览器和Web服务器之间的通讯 实现数据信息在客户端和Web服务器之间的加密传输 可以防止数据信息的泄露 为提高安全性 建议替换成自己的证书 并及时更新证书 保
  • 利用Petalinux定制Linux系统(ZYNQ)

    目录 一 创建vivado硬件平台 二 创建Petalinux工程 三 配置Linux内核 四 设置根文件系统 五 配置设备树文件 六 编译petalinux工程 七 制作SD卡启动文件 八 开发板启动设置 九 打开串口上位机 进入 Lin
  • 分布式缓存Redis之Java客户端

    写在前面 本学习教程所有示例代码见GitHub https github com selfconzrr Redis Learning 目前Redis的Java客户端主要有两种 Jedis Redission 个人感觉Jedis用的广泛一些
  • 数据分析--Numpy--去重与重复

    1 unique函数 通过unique函数可以找出数组中的唯一值并返回已经排序的结果 arr np array 1 1 1 2 2 3 3 res np unique arr print res 1 2 3 2 tile函数 np tile
  • web基础之自动处理表单填装javabean

    http hi baidu com smilelive blog item e31b8f50ea1ef212367abe77 html web开发中 肯定会设计到表单的提交 而表单一般都设计到一个表 表又对应一个javabea 一般我们都在
  • java-jsp篮球联赛管理系统c1246[独有源码]如何找到适合自己的毕业设计的指南

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 篮球联赛管理系统是为了更好地组织和管理篮球联赛而开发的一种信息化管理系统 随着篮球运动的普及和发展 越来越多的
  • Java编程实现控制台输出网址中所有的参数名及参数值

    项目 Java编程实现控制台输出网址中所有的参数名及参数值 时间 2019 8 14 作者 郑翰林 public class Math1 public static void main String args String baidu ht
  • 机制检验、异质性检验、调节效应

    目录 基准回归 稳健性检验 内生性处理 机制检验 机制分析模型 调整要素配置结构 机制分析模型 生产率提升效应 异质性检验 1 企业规模 2 企业注册地 调节效应 假设3后半部分 1 人力资本 2 市场化环境 本文是对王林辉老师的论文 工业
  • 使用cdn来加速字体文件在前端的加载速度,并监听字体是否加载完成

    最近在个人网站butterpig中实现了个性印章的在线设计功能 里面目前一共实现了有八九种个性印章的样式 并且还有六七种网络开源商用的字体类型 具体效果可以访问 个性印章在线设计查看 印章的设计 其实原理非常简单 主要就是通过canvas画
  • Spring Boot读取properties配置文件中的数据

    Spring Boot 专栏 https blog csdn net dkbnull category 9278145 html Spring Cloud 专栏 https blog csdn net dkbnull category 92