@ConfigurationProperties

作用:用于获取配置文件中的属性定义并绑定到javaBean属性中

举个栗子:

配置文件

mycar.name=徐昂
mycar.price=18w

定义实体类

package com.maggie.demo.entity;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data   //生成setget方法
@Component //将此类注册为组件
@ConfigurationProperties(prefix = "mycar",ignoreUnknownFields = true) //配置文件属性读取,读取前缀时mycar的,忽略不存在的字段
public class Car {private String name;private String  price;@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price='" + price + '\'' +'}';}
}

启动类输出验证

package com.maggie.demo;import com.maggie.demo.entity.Car;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;import java.io.IOException;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) throws IOException {ConfigurableApplicationContext run = SpringApplication.run(DemoApplication.class, args);Car car = run.getBean(Car.class);System.out.println(car.toString());}
}

输出结果

Car{name='徐昂', price='18w'}

产生问题,定义中文时,会产生乱码

解决方法

1,将配置文件换成yml文件,则不会产生乱码问题

mycar:name: '徐昂'price: '18w'

2, 覆盖原文件:org.springframework.boot.env.OriginTrackedPropertiesLoader

将OriginTrackedPropertiesLoader所有代码复制出来,按照包路径建立自己的包和类(包名和类名都必须和原来的一致,不然不生效)

然后找出原来的OriginTrackedPropertiesLoader上的编码片段:

        CharacterReader(Resource resource) throws IOException {this.reader = new LineNumberReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.ISO_8859_1));}

将其改为 : StandardCharsets.UTF_8

    CharacterReader(Resource resource) throws IOException {this.reader = new LineNumberReader(new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8));}

重启项目,发现项目中文乱码已经解决

Car{name='徐昂', price='18w'}

3, 自定义配置类

配置类

mycar.name=小汽车
mycar.price=18w

定义实体,添加**@PropertySource**注解,指定字符集取utf-8,并指定读取配置文件的路径。

注意这种方法只能对自定义的properties文件有效,对于spring boot默认生成的application.properties没有效果

@Data   //生成setget方法
@Component //将此类注册为组件
//指定字符集,并且指定读取的配置文件
@PropertySource(encoding = "UTF-8", value = "classpath:car.properties", ignoreResourceNotFound = true)
@ConfigurationProperties(prefix = "mycar",ignoreUnknownFields = true) //配置文件属性读取,读取前缀是mycar的
public class Car {private String name;private String  price;@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price='" + price + '\'' +'}';}
}

结果:

Car{name='小汽车', price='18w'}

第二种不推荐写法

@ConfigurationProperties+ @EnableConfigurationProperties

@EnableConfigurationProperties作用:开启组件配置绑定功能,将实体类组件注入到容器中

eg:

mycar.name=小汽车
mycar.price=18w

实体类

package com.maggie.demo.entity;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data   //生成setget方法
@ConfigurationProperties(prefix = "mycar",ignoreUnknownFields = true) //配置文件属性读取,读取前缀时mycar的,忽略不存在的字段
public class Car {private String name;private String  price;@Overridepublic String toString() {return "Car{" +"name='" + name + '\'' +", price='" + price + '\'' +'}';}
}

配置类

@Configuration //配置类注解 ==配置文件
@EnableConfigurationProperties(Car.class) //开启加载配置类
public class BeansConfiguration {}

–END 共勉

@ConfigurationProperties注解使用及乱码问题解决相关推荐

  1. Spring Boot 关于 @EnableConfigurationProperties 注解 —— 使用 @ConfigurationProperties 注解的类生效。

    先说作用: @EnableConfigurationProperties注解的作用是:使用 @ConfigurationProperties 注解的类生效. 说明: 如果一个配置类只配置@Config ...

  2. python php 通信,Python和php通信乱码问题解决方法

    Python和php通信乱码问题解决方法 发布于 2014-07-29 22:28:21 | 118 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertex ...

  3. springMVC保存数据到mysql数据库中文乱码问题解决方法

    springMVC保存数据到mysql数据库中文乱码问题解决方法 参考文章: (1)springMVC保存数据到mysql数据库中文乱码问题解决方法 (2)https://www.cnblogs.co ...

  4. java执行cmd命令,返回结果中文乱码问题解决

    java执行cmd命令,返回结果中文乱码问题解决 参考文章: (1)java执行cmd命令,返回结果中文乱码问题解决 (2)https://www.cnblogs.com/kwaitfort/p/90 ...

  5. Zip文件中文乱码问题解决方法(MAC->Windows)

    Zip文件中文乱码问题解决方法(MAC->Windows) 参考文章: (1)Zip文件中文乱码问题解决方法(MAC->Windows) (2)https://www.cnblogs.co ...

  6. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法

    Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 参考文章: (1)Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 (2)https://www.cnblog ...

  7. python3 库pandas写入csv格式文件出现中文乱码问题解决方法

    python3 库pandas写入csv格式文件出现中文乱码问题解决方法 参考文章: (1)python3 库pandas写入csv格式文件出现中文乱码问题解决方法 (2)https://www.cn ...

  8. centos7 中文乱码问题解决方法

    centos7 中文乱码问题解决方法 参考文章: (1)centos7 中文乱码问题解决方法 (2)https://www.cnblogs.com/lywJ/p/10710460.html 备忘一下.

  9. servlet——请求乱码问题解决

    请求乱码问题解决 1.使用 String 进行重新编码:uname=new String(uname.getBytes("iso8859-1"),"utf-8" ...

最新文章

  1. MLIR与Code Generation
  2. 爱上MVC3系列~开发一个站点地图(俗称面包屑)
  3. poj 3984 迷宫问题 BFS
  4. UA SIE545 优化理论基础1 凸分析8 极点与极方向
  5. 办公出口ip多个地址_如何正确分配与高效管理IP地址
  6. Linux之grep:过滤器按照字符进行过滤  选项规定内容样式 模式规定内容
  7. 前端学习(1152):let经典面试题2
  8. python的基础_python基础知识,python必背内容,一、python的基
  9. mysql mvcc gap lock_为什么说 MVCC 和 Gap Lock 解决了 MySQL 的幻读问题
  10. 8分频verilog线_解密POE交换机供电秘密,8芯网线断芯不再害怕!
  11. iOS底层探索之Block(一)——初识Block(你知道几种Block呢?)
  12. 5星评价,1位小数显示
  13. STC学习:“FM收音机”原理与测试说明
  14. Altium Designer 20的安装教程
  15. S.O. 推出程序员身价计算器,看看自己值多少钱?
  16. linux添加终端快捷键,linux 终端快捷键
  17. 求循环小数的循环节C/C++
  18. [渝粤教育] 同济大学 外科手术技能教学 参考 资料
  19. 项目知识管理体系指南阅读(2)
  20. 全栈开发-IDE介绍与设置、字符串格式化、数据类型、for循环

热门文章

  1. 忠诚度管理软件市场分析-主要企业、产品类别及应用
  2. linux整理碎片命令,如何在 Linux 中整理磁盘碎片
  3. 用html和js编写黑洞数,黑洞数及其简单理论
  4. 手把手教你vlookup两个表格间对应数据的匹配!
  5. C 已知华氏温度F与摄氏温度C的关系是:C=5/9*(F-32),编写程序,计算华氏温度F为-10,0,10,20......290°C时,摄氏温度C的值。
  6. log4j-slf4j-impl cannot be present with log4j-to-slf4j
  7. buuctf-misc-[SWPU2019]神奇的二维码1
  8. iPhone和iPad各代的分辨率
  9. w10网络里面没有计算机,win10计算器没有了怎么办_w10系统自带的计算器没有了的解决方法...
  10. 12306火车订票系统谈网站架构优化