Spring如何利用@Value注解读取yml中的map配置

目录
  • @Value注解读取yml中的map配置
    • 下边是我在yml中的map写法
    • 使用时候注解的写法
    • 举个例子
  • spring注解@Value通过yml文件注入map
    • yml文件
    • java代码注入

@Value注解读取yml中的map配置

网上查了好多资料,都是.properties文件中读取,而且又是几个人抄来抄去,找了半天功夫不负有心人,终于找到了详尽的用法介绍。

下边是我在yml中的map写法

test:
  map: '{"test1":"12345","test2":"54321"}'

使用时候注解的写法

    @Value("#{${test.map}}")
    private Map<String,String> mapKey;

如果是.properties文件写法很不一样。

还有一种使用方法时创建一个类,使用@ConfigurationProperties注解,

举个例子

yml文件的写法:

test:
  map: 
      key1: 12345
      key2: 54321

新建类的写法:

package com.sohu.umab.backendoperation.vo;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Data
@Component
@ConfigurationProperties(prefix = "test")
public class AppKey {
//此处属性名必须和yml文件中的保持一致,否则读取不到
    private Map map = new HashMap();
}

然后在使用的地方,直接注入你创建的类即可,这种方法缺点就是,之后每增加一个配置map,你就需要改这个类,耦合性高,不太灵活,推荐使用注解的方式。

参考的学习文章:

  • 注解读取配置
  • 创建类读取配置

这两篇让我受益匪浅呀,特别是第一篇文章!

注意:

@Value注解写在静态变量上边是不起作用的,

@Value("#{${appKey.map}}")
    private static Map<String, String> appkeyMap;

debug模式下可以看到,appkeyMap为空,想要对静态变量进行赋值,需要用到set函数,可以参考下边这篇文章@Value对静态变量赋值

spring注解@Value通过yml文件注入map

yml文件

app:
 map: "{-1: "发送失败",0: "未发送",1: "发送成功"}"

java代码注入

@Value("#{${app.map}}")
private Map<String,String> map;

注意:要注入配置文件值的类,必须是spring的组件,可以用@Component或者是@Service、@Controller等注解的类都可以注入,普通java bean是不能注入值的

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 详解springboot读取yml配置的几种方式

    yml 文件规则 yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的. 不支持tab缩进 可以使用 "-小写字母" 或 "_小写字母"来 代替 "大写字母",如 userName 与 user-name ,user_name 含义是一样的 key: value 格式书写 key 后面跟着冒号,再后面跟着一个空格,然后是值 几种数据格式的表示方式 1.普通的值(数字,字符串,布尔) 2.对象.Map (属性和值) (

  • SpringBoot读取yml文件中配置数组的2种方法

    目录 通过@ConfigurationProperties注解读取 1.读取的是配置在application.yml文件中的属性 2.如果配置是在一个单独的yml文件中 通过@Value注解变相读取,曲线救国方案 一直都在用Spring的@Value注解读取yml中的配置,这两天在读取配置的时候,想读取yml中配置的一个数组,通过@Vaule一直获取不到,通过一番资料的查询,才彻底清楚了@Vaule的使用情况. 在Spring中读取配置文件的快捷方法常见的有两种,一个是通过@Vaule注解进行单

  • 使用springboot配置文件yml中的map形式

    目录 springboot配置文件yml的map形式 1.yml中的格式 2.创建一个类 3.引用 4.打印 SpringBoot yaml文件map集合使用 yaml文件配置 配置文件对应的bean springboot配置文件yml的map形式 1.yml中的格式 tes: maps: {key1: 12,key2: 34} 或者 tes: maps: key1: 15 key2: 2 2.创建一个类 然后创建对应类型的字段(注意下这个类的那两个注释了的注解) package com.etc

  • Spring中@Value读取properties作为map或list的操作

    Spring读取properties作为map: properties文件中: blog-top-links={home:"/home"} blog-list=1,2,3 map的写法和json差不多,但是应该不支持嵌套,没有尝试. key加不加引号都可以,value加双引号单引号都可以,但是当key中有"-"时就必须加引号,例如key为:about-me时,就必须加引号否则解析失败 list的写法和数组差不多,可以自定义分隔符,在java中分割即可 配置类中: @

  • Spring如何利用@Value注解读取yml中的map配置

    目录 @Value注解读取yml中的map配置 下边是我在yml中的map写法 使用时候注解的写法 举个例子 spring注解@Value通过yml文件注入map yml文件 java代码注入 @Value注解读取yml中的map配置 网上查了好多资料,都是.properties文件中读取,而且又是几个人抄来抄去,找了半天功夫不负有心人,终于找到了详尽的用法介绍. 下边是我在yml中的map写法 test:   map: '{"test1":"12345",&quo

  • 教你利用python如何读取txt中的数据

    目录 前言 方法一:运用open()函数 方法二:使用numpy包的loadtxt方法 方法三:使用pandas的read_table方法进行读取 总结 前言 当我们在用python时可能会遇到想要把txt文档里的数据读取出来然后进行绘图,那么我们要怎么才能够将txt里的数据读取出来呢? 假设有txt文本如下: 想要把上述文本数据读取出来,可以用以下方法: 方法一:运用open()函数 该方法使用最基本的open函数进行读取,此处将会把数据读取到一个列表中,这个方法一般就是open打开文件.re

  • Webpack中Source Map配置深入解析

    目录 为什么需要Source Map devtool选项 devtool为false和'eval'有啥区别 准备工作 1,创建项目 安装依赖 2,添加文件 3,写配置 webpack.config.js 4,在package.json中添加 5,执行 npm run build,打包文件生成到了dist文件夹中,至此,准备工作完毕. 观察devtool为false时 1, 在dist/main.js中 2,在浏览器中,观察开发者工具中的Sources. 小结 观察devtool为'eval'时

  • 如何更优雅地获取spring boot yml中的值

    前言 偶然看到国外论坛有人在吐槽同事从配置文件获取值的方式,因此查阅了相关资料发现确实有更便于管理更优雅的获取方式. github demo地址: springboot-yml-value 1.什么是yml文件 application.yml取代application.properties,用来配置数据可读性更强,尤其是当我们已经制定了很多的层次结构配置的时候. 下面是一个非常基本的yml文件: server: url: http://localhost myapp: name: MyAppli

  • 使用Spring从YAML文件读取内容映射为Map方式

    目录 从YAML文件读取内容映射为Map Spring框架中的YAML文件 从YAML文件内容注入Map @ConfigurationProperties与@Value 配置文件yml中的map形式 yml中的格式 创建一个类 引用 打印 从YAML文件读取内容映射为Map 如何在Spring Boot中从YAML文件注入到Map. 首先,将对Spring框架中的YAML文件有一些了解. 然后,通过一个实际示例展示如何将YAML属性绑定到Map. Spring框架中的YAML文件 使用YAML文

  • Spring和SpringMVC扫描注解类冲突的解决方案

    目录 Spring和SpringMVC扫描注解类冲突 最正确的配置方式 也可以用直接扫描的方式 几种不同配置的测试 Spring和SpringMVC注解扫描注意事项 现象 方法 Spring和SpringMVC扫描注解类冲突 最正确的配置方式 在主容器中applicationContext.xml中,将Controller的注解排除掉 <context:component-scan base-package="com"> <context:exclude-filter

  • 解决springboot利用ConfigurationProperties注解配置数据源无法读取配置信息问题

    @ConfigurationProperties是springboot新加入的注解,主要用于配置文件中的指定键值对映射到一个java实体类上.那么它是怎么发挥作用的呢?下面我们将揭开@ConfigurationProperties的魔法. ConfigurationPropertiesBindingPostProcessor这个bean后置处理器,就是来处理bean属性的绑定的,这个bean后置处理器后文将称之为properties后置处理器.你需要知道以下几件事: ioc容器context的e

  • Spring Boot 利用注解方式整合 MyBatis

    目录 前言 整合过程 新建 Spring Boot 项目 添加 pom 依赖 准备数据库 pojo 层 dao 层 service 层 controller 层 入口程序配置 网页测试 总结 前言 目前而言,国内大家使用最多的持久层框架可能还是 MyBatis 吧,那既然如此,更强大的 Spring Boot 遇上炽手可热的 MyBatis,又会擦出什么样的火花呢? 那本文就来看看,如何利用 SpringBoot 来整合 Mybatis. 如下图是总结的整合过程的大概流程,那接下来我们就来开始具

随机推荐