注解ConfigurationProperties注入yml配置文件中的数据
在使用SpringBoot开发中需要将一些配置参数放在yml文件中定义,再通过Java类来引入这些配置参数
SpringBoot提供了一些注解来实现这个功能
- ConfigurationProperties
- Value
- EnableConfigurationProperties
下面提供例子来说明如何引入常规变量,数组,List,Map,引用对象。
引入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--lombok 插件,非必须 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
注解类
这里定义了一个全局的注解类,
@Data
@ToString
@ConfigurationProperties(prefix = "all")
public class AllConfigurationProperties {
//普通变量
private String name;
//引用对象
private OtherProperties other = new OtherProperties();
//数组
private String[] server;
//list
private List list;
//map
private Map map;
//复杂map
private Map<String, ModuleConfig> modules = new LinkedHashMap();
//复杂list
private List<ModuleConfig> modulesList; }
ConfigurationProperties:标明者是一个配置类,需要prefix配置yml中的配置前缀。 需要注意几点
1. 配置类中的名称应当符合JavaBean的命名方式
2. 配置类中的名称应当与yml中的相同,否则应使用@Value指定
比如:
yml文件: all:
name: libai
------------------------------------
@Value("${all.name}")
private String myName;
3. 如果已经使用@Value方式,可不用写Setter方法。否则必须为该变量写Setter方法,这里使用lombok的注解@Data来配置,会自动生成Setter,Getter,ToString方法 4. 默认值设置:
(1)当使用@Value时,可以通过如下方式实现 @Value("${nzrpc.netty.port:8321}")
private int nport;
当yml没有配置nzrpc.netty.port 时,默认值便是8321
(2) 或者是直接对变量赋值
private int nport = 8321 ;
private OtherProperties other = new OtherProperties();
上述配置类的引用对象
@Data
public class ModuleConfig {
private static final long serialVersionUID = 5508512956753757169L;
private String name;
private String version;
private String owner;
} @Data
public class OtherProperties { private Long id;
private String version;
}
使能配置类
@Slf4j
@EnableConfigurationProperties(AllConfigurationProperties.class)
@Configuration
public class AutoConfiguration { @Autowired
AllConfigurationProperties properties; @PostConstruct
public void init(){ System.out.println("properties = " + properties); } }
这里使用@EnableConfigurationProperties使能配置类。它会为AllConfigurationProperties注入yml中的配置参数,并创建一个bean,后续可使用@Autowired注入使用
@Configuration注明这是一个SpringBoot的配置类
使用方法init()输出配置.
yml中配置
all:
name: libai
other:
id: 100
version: 1.0.1 server:
- 127.0.0.1
- 127.0.0.2
- 127.0.0.3 list:
- 111
- 222
- 333 map:
key1: value1
key2: value2
key3: value3 modules:
key1:
name: modules-name-1
version: modules-version-1
owner: modules-owner-1
key2:
name: modules-name-2
version: modules-version-2
owner: modules-owner-2 modulesList:
- name: modules-name-3
version: modules-version-3
owner: modules-owner-3
- name: modules-name-4
version: modules-version-4
owner: modules-owner-4
输出
properties =
AllConfigurationProperties(
name=libai,
other=OtherProperties(id=100, version=1.0.1),
server=[127.0.0.1, 127.0.0.2, 127.0.0.3],
list=[111, 222, 333],
map={
key1=value1,
key2=value2,
key3=value3
},
modules={
key1=ModuleConfig(name=modules-name-1, version=modules-version-1, owner=modules-owner-1),
key2=ModuleConfig(name=modules-name-2, version=modules-version-2, owner=modules-owner-2)
},
modulesList=[
ModuleConfig(name=modules-name-3, version=modules-version-3, owner=modules-owner-3),
ModuleConfig(name=modules-name-4, version=modules-version-4, owner=modules-owner-4)
])
注解ConfigurationProperties注入yml配置文件中的数据的更多相关文章
- spring boot: 从配置文件中读取数据的常用方法(spring boot 2.3.4)
一,从配置文件中读取数据有哪些方法? 通常有3种用法: 1,直接使用value注解引用得到配置项的值 2, 封装到Component类中再调用 3, 用Environment类从代码中直接访问 生 ...
- Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题
在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方 ...
- springboot在yml配置文件中配置类的属性笔记
首先建立一个简单的实体类,我这里以学生为例,并加上@Component和@ConfigurationProperties(prefix ="student")注解,其中prefix ...
- web中纯java获取配置文件中的数据
/*********获取配置文件,但配置文件中的值改变,不会随着值的改变也获取的参数值改变**********/ /** * 原因是因为,类装载,装载完后,不会再去装载了 * */// I ...
- 在controller中无法通过注解@Value获取到配置文件中定义的值
1. 默认的我们通常只在dao层用到jdbc的配置,然后使用到@Value注解获取到值. 这时候会在spring-dao扫描中加入下面配置 <context:property-placehold ...
- css注入获取网页中的数据
<style><?php echo htmlspecialchars($_GET['x']);?></style> <br><br>< ...
- java中读取配置文件中的数据
1.先在项目中创建一个包(如:config),再创建一个配置文件(如:a.properties),添加配置信息如下:比如:name=kakaage=28 2.代码:import java.io.IOE ...
- SpringBoot中yml配置文件
1.yml配置文件书写格式 格式是在普通配置文件中以“.”分割的属性名称,该为“: ”和换行. 例子: //普通格式 spring.datasource.driver-class-name=com.m ...
- springboot项目logback.xml或者logback-spring.xml中读取不到application.yml或application.properties配置文件中的配置解决办法
在springboot项目中我们可能想要实现不同环境的日志项目配置不同,比如我想让不同环境的日志路径不同. 这时候我们很容易想: 1.到将日志路径配置在springboot的:application- ...
随机推荐
- Linux时间子系统之(一):时间的基本概念
专题文档汇总目录 Notes:Linux时间基准点:Linux时间和broken-down time(struct tm):不同精度的时间表示time_t.timeval.timespec. 原文地址 ...
- Linux时间子系统之(六):POSIX timer
专题文档汇总目录 Notes:首先讲解了POSIX timer的标识(唯一识别).POSIX Timer的组织(管理POSIX Timer).内核中如何抽象POSIX Timer:然后分析了POSIX ...
- 使用Coding Pages托管网站
作者:荒原之梦 Coding官网: https://coding.net Coding Pages官网页面: https://coding.net/pages/ 具体过程如下: 1 注册Coding账 ...
- C++使用类和对象
1. 内置函数 程序调用函数时需要一定的时间和空间开销,其执行过程一般如下: 而C++提供了一种高效率的方法,即在编译的时候将所调用函数的代码直接嵌入到主函数中,而不是将流程转出去,这样可以避免函数调 ...
- Python将html转化为pdf
前言 前面我们对博客园的文章进行了爬取,结果比较令人满意,可以一下子下载某个博主的所有文章了.但是,我们获取的只有文章中的文本内容,并且是没有排版的,看起来也比较费劲... 咋么办的?一个比较好的方法 ...
- PHP引用符&的用法举例
php的引用就是在变量或者函数.对象等前面加上&符号.在PHP 中引用的意思是:不同的名字访问同一个变量内容.与C语言中的指针是有差别的,C语言中的指针里面存储的是变量的内容在内存中存放的地址 ...
- Linux.安装phantomjs
PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...
- 在Windows Server 2008 R2下搭建jsp环境(四)-在测试的过程中可能出现的问题
环境基本部署好了之后,便开始测试,一定要让他经得起"考验",他才会值得你的信赖.Tomcat服务器部署成功的的验证方法(默认端口的情况下): 1.loacalhost:8080 2 ...
- 【bzoj1758】[Wc2010]重建计划
Description Input 第一行包含一个正整数N,表示X国的城市个数. 第二行包含两个正整数L和U,表示政策要求的第一期重建方案中修建道路数的上下限 接下来的N-1行描述重建小组的原有方案, ...
- BZOJ_2561_最小生成树_最小割
BZOJ_2561_最小生成树_最小割 题意: 给定一个边带正权的连通无向图G=(V,E),其中N=|V|,M=|E|,N个点从1到N依次编号,给定三个正整数u,v,和L (u≠v),假设现在加入一条 ...