SpringBoot获取yml和properties配置文件的内容

(一)yml配置文件:

pom.xml加入依赖:

<!-- 支持 @ConfigurationProperties 注解 -->
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <version>${spring-boot.version}</version>
</dependency>

在application.yml文件中加上:

#自定义的属性和值
myYml:
 simpleProp: simplePropValue
 arrayProps: 1,2,3,4,5
 listProp1:
  - name: abc
   value: abcValue
  - name: efg
   value: efgValue
 listProp2:
  - config2Value1
  - config2Vavlue2
 mapProps:
  key1: value1
  key2: value2

使用一个java类获取yml文件的内容:

package com.sun.configuration;

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 加载yaml配置文件的方法
 * Created by sun on 2017-1-15.
 * spring-boot更新到1.5.2版本后locations属性无法使用
 * @PropertySource注解只可以加载proprties文件,无法加载yaml文件
 * 故现在把数据放到application.yml文件中,spring-boot启动时会加载
 */
@Component
//@ConfigurationProperties(locations = {"classpath:config/myProps.yml"},prefix = "myProps")
@ConfigurationProperties(prefix = "myYml")
public class YmlConfig {

  String simpleProp;
  private String[] arrayProps;
  private List<Map<String, String>> listProp1 = new ArrayList<>(); //接收prop1里面的属性值
  private List<String> listProp2 = new ArrayList<>(); //接收prop2里面的属性值
  private Map<String, String> mapProps = new HashMap<>(); //接收prop1里面的属性值

  public String getSimpleProp() {
    return simpleProp;
  }

  //String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要
  public void setSimpleProp(String simpleProp) {
    this.simpleProp = simpleProp;
  }

  public String[] getArrayProps() {
    return arrayProps;
  }

  public void setArrayProps(String[] arrayProps) {
    this.arrayProps = arrayProps;
  }

  public List<Map<String, String>> getListProp1() {
    return listProp1;
  }

  public void setListProp1(List<Map<String, String>> listProp1) {
    this.listProp1 = listProp1;
  }

  public List<String> getListProp2() {
    return listProp2;
  }

  public void setListProp2(List<String> listProp2) {
    this.listProp2 = listProp2;
  }

  public Map<String, String> getMapProps() {
    return mapProps;
  }

  public void setMapProps(Map<String, String> mapProps) {
    this.mapProps = mapProps;
  }
}

通过依赖注入就可以获取该对象:

@Autowired
private YmlConfig config;

方法内获取值:

ObjectMapper objectMapper = new ObjectMapper();
//测试加载yml文件
System.out.println("simpleProp: " + config.getSimpleProp());
System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

(二)properties配置文件:

使用@PropertySource注解加载配置文件,该注解无法加载yml配置文件。使用@Value注解获得文件中的参数值

package com.sun.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

/**
 * 加载properties配置文件,在方法中可以获取
 * abc.properties文件不存在,验证ignoreResourceNotFound属性
 * 加上encoding = "utf-8"属性防止中文乱码,不能为大写的"UTF-8"
 * Created by sun on 2017-3-30.
 */
@Configuration
@PropertySource(value = {"classpath:/config/propConfigs.properties","classpath:/config/abc.properties"},
    ignoreResourceNotFound = true,encoding = "utf-8")
public class PropConfig {

  // PropertySourcesPlaceholderConfigurer这个bean,
  // 这个bean主要用于解决@value中使用的${…}占位符。
  // 假如你不使用${…}占位符的话,可以不使用这个bean。
  @Bean
  public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
  }
}
//获取properties文件参数值有两种方法,一种获得Environment 的对象,第二种就是@Value注解

@Autowired
  private Environment env;
  @Value("${age}")
  String name;

  @RequestMapping("/")
  @ResponseBody
  String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {
    logger.info("测试通过!!!");
    ObjectMapper objectMapper = new ObjectMapper();
    //测试加载yml文件
    System.out.println("simpleProp: " + config.getSimpleProp());
    System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
    System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
    System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
    System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

    //测试加载properties文件
    System.out.println(env.getProperty("name"));//孙凯
    System.out.println(env.getProperty("abc"));//null
    System.out.println(name);//26

    return "Hello World!";
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot的properties配置文件读取

    我在自己写点东西玩的时候需要读配置文件,又不想引包,于是打算扣点Spring Boot读取配置文件的代码出来,当然只是读配置文件没必要这么麻烦,不过反正闲着也是闲着,扣着玩了. 具体启动过程以前的博客写过Spring Boot启动过程(一),这次入口在SpringApplication类中: private ConfigurableEnvironment prepareEnvironment( SpringApplicationRunListeners listeners, Applicatio

  • spring boot application properties配置实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: # =================================================================== # COMMON SPRING BOOT PROPERTIES # # This sample file is provided as a guideline. Do NOT copy it in its # entirety to your own application. ^^^ # ========

  • 详解spring boot 使用application.properties 进行外部配置

    application.properties大家都不陌生,我们在开发的时候,经常使用它来配置一些可以手动修改而且不用编译的变量,这样的作用在于,打成war包或者jar用于生产环境时,我们可以手动修改环境变量而不用再重新编译. spring boo默认已经配置了很多环境变量,例如,tomcat的默认端口是8080,项目的contextpath是"/"等等,可以在这里看spring boot默认的配置信息http://docs.spring.io/spring-boot/docs/curr

  • spring boot中的properties参数配置详解

    application.properties application.properties是spring boot默认的配置文件,spring boot默认会在以下两个路径搜索并加载这个文件 src\main\resources src\main\resources\config 配置系统参数 在application.properties中可配置一些系统参数,spring boot会自动加载这个参数到相应的功能,如下 #端口,默认为8080 server.port=80 #访问路径,默认为/

  • 详解Spring Boot加载properties和yml配置文件

    一.系统启动后注入配置 package com.example.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframewo

  • SpringBoot获取yml和properties配置文件的内容

    (一)yml配置文件: pom.xml加入依赖: <!-- 支持 @ConfigurationProperties 注解 --> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor --> <dependency> <groupId>org.springframework.boot</groupId>

  • Springboot如何获取yml、properties参数

    目录 如何获取yml.properties参数 1.使用@Value()注解 2.使用 @component 配置文件读取yml自定义参数(亲测可用) 首先自定义一个参数 利用平时@value 获取值 另一种方式 类上面添加@component 如何获取yml.properties参数 1.使用@Value()注解 1.1 配置数据 如:在properties.yml文件配置如下数据 message_zh: 张三 message_en: ergouzi 在controller中获取: 1.2 读

  • 解决SpringBoot加载application.properties配置文件的坑

    SpringBoot加载application.properties配置文件的坑 事情的起因是这样的 一次,本人在现场升级程序,升级完成后进行测试,结果接口调用都报了这么个错误: 大概意思是https接口需要证书校验,这就奇怪了,项目启动加载的是包外的application.properties配置文件,配置文件里没有配置使用https啊.本人马上检查了下包内的application.properties配置文件,发现包内确实配置了https相关的配置项: 明明包外的配置文件优先级高于包内的,为

  • 在SpringBoot下读取自定义properties配置文件的方法

    SpringBoot工程默认读取application.properties配置文件.如果需要自定义properties文件,如何读取呢? 一.在resource中新建.properties文件 在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下.如图remote.properties所示 二.编写配置文件 remote.uploadFilesUrl=/resource/files/ remote.uploadPicUrl=/resource

  • @Value如何获取yml和properties配置参数

    @Value获取yml和properties配置参数 Yml: #定时任务配置 application: xxl: job: enabled: true admin: addresses: http:///yusp-job-admin/ #127.0.0.1:8080指网关ip:port,yusp-job-admin为调度中心服务名称.通过网关,注册到微服务的/api/server接口,完成注册动作 executor: appname: af_job #执行器名称,要求务必唯一 ip: 10.2

  • SpringBoot实现yml配置文件为变量赋值

    目录 yml配置文件为变量赋值 1. 创建person类和Car类 2. 为person类创建yml配置文件 3.创建启动类 在yml文件中配置变量 例如:二维码的内容 yml配置文件为变量赋值 1. 创建person类和Car类 在person类上加注释 @ConfigurationProperties(prefix = "person"),表明这个类的成员变量的值从配置类注入. 注意这里的person类的成员变量需要有get/set方法. import org.springfram

  • Java中的几种读取properties配置文件的方式

    相信对于一名JAVA开发者开说properties文件一定再熟悉不过了,比如一下配置: config.properties会经常存放一些系统常量,版本号,路径之类的 database.properties存放数据库的连接参数 log4j.properties 日志的一些基本配置 redis.properties 缓存数据库的一些配置 当然前缀是根据用能自行定义的,一般来说文件的内容的格式是"键=值"的格式,文本注释信息可以用"#"来注释,下面来说说开发中如何读写pr

  • springboot代码,注解配置获取yml,properties文件的map即键值对

    目录 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 properties 获取自定义键值对 properties配置应用,为什么需要使用properties文件 注解配置获取yml,properties文件map即键值对 yml获取自定义键值对 yml中的键值对 test:   map:     key1: value1     key2: value2     key3: value3 pom中的依赖配置 <dependency>     <gro

  • springboot 使用yml配置文件给静态变量赋值教程

    声明: 此处需求是修改封装的clickhouseUtil数据查询引擎连接工具类.由于此类中的方法都是静态方法.连接地址等参数需要根据不同环境改变.例如开发下地址,测试下地址,生产地址等,所有通过配置文件来获取不同环境下的配置参数,但是使用的方法是静态的,所有不能使用一般情况下的@value直接给变量赋值,需要用到spring 属性的set方法来给静态变量赋值,然后静态方法使用静态变量即可 方法: 第一步:在yml文件中配置需要的参数 clickhouse: address: jdbc:click

  • SpringBoot获取配置文件的简单实现方法

    前言 在讲SpringBoot 获取配置文件之前我们需要对SpringBoot 的项目有一个整体的了解,如何创建SpringBoot 项目,项目结构等等知识点,我在这里就不一一讲述了,没有学过的小伙伴可以自己在网上找一些资料进行学习,很简单的. 下面让我们开始今天的内容讲解吧. 一.SpringBoot 全局配置文件的加载顺序 在SpringBoot 当中,全局配置文件有两种不同的格式,一个是我们常见的properties, 一种是yml. 这两种格式的文件其实也没什么太大的区别,使用的时候按照

随机推荐