注解ConfigurationProperties注入yml配置文件中的数据

时间:2022-01-17 00:59:00

在使用SpringBoot开发中需要将一些配置参数放在yml文件中定义,再通过Java类来引入这些配置参数

SpringBoot提供了一些注解来实现这个功能

  • ConfigurationProperties
  • Value
  • EnableConfigurationProperties

下面提供例子来说明如何引入常规变量,数组,List,Map,引用对象。

[相关代码-GitHub]

引入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配置文件中的数据的更多相关文章

  1. spring boot&colon; 从配置文件中读取数据的常用方法&lpar;spring boot 2&period;3&period;4&rpar;

    一,从配置文件中读取数据有哪些方法? 通常有3种用法: 1,直接使用value注解引用得到配置项的值 2,  封装到Component类中再调用 3,  用Environment类从代码中直接访问 生 ...

  2. Spring boot中普通工具类不能使用&commat;Value注入yml文件中的自定义参数的问题

    在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方 ...

  3. springboot在yml配置文件中配置类的属性笔记

    首先建立一个简单的实体类,我这里以学生为例,并加上@Component和@ConfigurationProperties(prefix ="student")注解,其中prefix ...

  4. web中纯java获取配置文件中的数据

    /*********获取配置文件,但配置文件中的值改变,不会随着值的改变也获取的参数值改变**********/  /**   * 原因是因为,类装载,装载完后,不会再去装载了   * *///  I ...

  5. 在controller中无法通过注解&commat;Value获取到配置文件中定义的值

    1. 默认的我们通常只在dao层用到jdbc的配置,然后使用到@Value注解获取到值. 这时候会在spring-dao扫描中加入下面配置 <context:property-placehold ...

  6. css注入获取网页中的数据

    <style><?php echo htmlspecialchars($_GET['x']);?></style> <br><br>< ...

  7. java中读取配置文件中的数据

    1.先在项目中创建一个包(如:config),再创建一个配置文件(如:a.properties),添加配置信息如下:比如:name=kakaage=28 2.代码:import java.io.IOE ...

  8. SpringBoot中yml配置文件

    1.yml配置文件书写格式 格式是在普通配置文件中以“.”分割的属性名称,该为“: ”和换行. 例子: //普通格式 spring.datasource.driver-class-name=com.m ...

  9. springboot项目logback&period;xml或者logback-spring&period;xml中读取不到application&period;yml或application&period;properties配置文件中的配置解决办法

    在springboot项目中我们可能想要实现不同环境的日志项目配置不同,比如我想让不同环境的日志路径不同. 这时候我们很容易想: 1.到将日志路径配置在springboot的:application- ...

随机推荐

  1. &lbrack;FromBody&rsqb;与&lbrack;FromUrl&rsqb;

    我们都知道,前台请求后台控制的方法有get方法和post方法两种, get:只支持ulr传数据,不管你是手动把参数拼接在Url里面还是写在data里面,只要是用get方法,都会自动绑定到url里面的形 ...

  2. HTML DOM 实例-Document 对象

    使用 document.write() 向输出流写文本 <html><body><script type="text/javascript">d ...

  3. 转载——web前端相关资源总结

    前端牛人博客:张克军.阮一峰.拔赤(李晶).拔赤(李晶)2.张鑫旭.梦想天空.阿当.泽飞.刘杰(嗷嗷).为之漫笔(李松峰).goddyzhao.hax的技术部落.周爱民.随网之舞.子鼠.司徒正美.ju ...

  4. Java高新技术 反射机制

     Java高新技术 反射机制 知识概要:                   (1)反射的基石 (2)反射 (3)Constructor类 (4)Field类 (5)Method类 (6)用反射方 ...

  5. Codeforces 448 E&period; Divisors &lpar;DFS&comma;储存结构&rpar;

    题目链接:E. Divisors 题意: 给出一个X,f(X)是X所有约数的数列(例6:1 2 3 6),给出一个k,k是递归的次数(例:k=2 : f(f(X)) ; X=4,k=2: 1 1 2 ...

  6. 二级联动,三级联动,初学者,纯javascript,不含jQuery

    二级联动: html代码: <body> <select id="province" onchange="getCity(this.options.se ...

  7. PHP删除数组中空值的方法介绍

    这篇文章主要介绍了PHP删除数组中空值的方法介绍,需要的朋友可以参考下 说来惭愧,以前在去掉数组的空值是都是强写foreach或者while的,利用这两个语法结构来删除数组中的空元素,简单代码如下: ...

  8. webstorm 很卡 scanning files to index &lpar;扫描文件索引&rpar;

    webstorm 号称"前端神器",但npm导入包跑索引,会很卡不停的跑索引... 排除你不想索引的文件夹 找到你想排除的文件夹(主要是node_modulewe文件夹),右键选择 ...

  9. css 背景透明色, 文字不透明。

    [原]CSS实现背景透明,文字不透明,兼容所有浏览器 background-color: rgba(0,0,0,0.5); filter:Alpha(opacity=50);

  10. oracle的分析函数over&lpar;Partition by&period;&period;&period;&rpar; 及开窗函数

        over(Partition by...) 一个超级牛皮的ORACLE特有函数. oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函 ...