博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot读取配置文件的几种方式
阅读量:2169 次
发布时间:2019-05-01

本文共 7911 字,大约阅读时间需要 26 分钟。

@[TOC](目录)

先准备一下两个配置文件,名称为:application.propertiesapplication.yml

userproperties.name=ss===propertiesuserproperties.age=11===propertiesuserproperties.sex=12===propertiesuserproperties.email=3333@163.com=====properties
useryml:  name: gongjie  age: 23  sex: 1  email: 111@163.com

#  一、使用@Value注解 

@Value("${userproperties.name}")    private String name;    @Value("${userproperties.age}")    private String age;    @Value("${userproperties.sex}")    private String sex;    @Value("${userproperties.email}")    private String email;    @Value("${useryml.name}")    private String nameyml;    @Value("${useryml.age}")    private String ageyml;    @Value("${useryml.sex}")    private String sexyml;    @Value("${useryml.email}")    private String emailyml;    @Test    public void testValue(){            System.out.println("name=" + name + ",age=" + age + ",sex="         + sex + ",email" + email);               System.out.println("nameyml=" + nameyml + ",ageyml=" + ageyml        + ",sexyml=" + sexyml + ",emailyml" + emailyml);    }

#  二、使用@ConfigurationProperties注解 

@Component//如果不用@Component修饰。则在容器无法获取。需要在启动类上加@EnableConfigurationProperties(ReadPropertiesValue.class)将其注册到容器中。@ConfigurationProperties(prefix = "userproperties")//prefix:指定配置文件中键名称的前缀。public class ReadPropertiesValue {    private String name;    private String age;    private String email;    private String sex;    @Override    public String toString() {        return "ReadPropertiesValue{" +                "name='" + name + '\'' +                ", age=" + age +                ", email='" + email + '\'' +                ", sex=" + sex +                '}';    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public void setEmail(String email) {        this.email = email;    }    public void setSex(String sex) {        this.sex = sex;    }}

@Component@ConfigurationProperties(prefix = "useryml")public class ReadYmlValue {    private String name;    private String age;    private String email;    private String sex;    @Override    public String toString() {        return "ReadYmlValue{" +                "name='" + name + '\'' +                ", age=" + age +                ", email='" + email + '\'' +                ", sex=" + sex +                '}';    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public void setEmail(String email) {        this.email = email;    }    public void setSex(String sex) {        this.sex = sex;    }}

#  三、使用Environment

注意:这种方式是直接依赖注入Evnironment对象,然后使用environment.getProperty("键名")即可读取对应的值。

@AutowiredEnvironment environment;@Testpublic void environmentTest(){    System.out.println(environment.getProperty("userproperties.name")     + "==" + environment.getProperty("userproperties.age") + "==" +     environment.getProperty("userproperties.sex") + "==" +     environment.getProperty("userproperties.email"));    System.out.println(environment.getProperty("useryml.name") + "=="     + environment.getProperty("useryml.age") + "==" +     environment.getProperty("useryml.sex") + "==" +     environment.getProperty("useryml.email"));}

4. 读取自定义配置文件

创建configValue.propertiesconfigValue.yml配置文件

  • configValue.properties
userconfigvalueproperties.name=yuanjConfigValueuserconfigvalueproperties.age=11ConfigValueuserconfigvalueproperties.sex=12ConfigValueuserconfigvalueproperties.email=3333@163.comConfigValue
  • yml
userconfigvalueyml:  name: yuanjconfigvalueyml  age: 11configvalueyml  sex: 12configvalueyml  email: 3333@163.comconfigvalueyml

4.1 一、使用@PropertySource + @Value

  • 读取 properties 文件内容
@Component@PropertySource(value = "classpath:configValue.properties")public class ReadPropertiesByValue {    @Value("${userconfigvalueproperties.name}")    public String name;    @Value("${userconfigvalueproperties.age}")    public String age;    @Value("${userconfigvalueproperties.sex}")    public String sex;    @Value("${userconfigvalueproperties.email}")    public String email;    @Override    public String toString() {        return "ReadPropertiesByValue{" +                "name='" + name + '\'' +                ", age='" + age + '\'' +                ", sex='" + sex + '\'' +                ", email='" + email + '\'' +                '}';    }}

@Component@PropertySource(value = "classpath:configValue.yml")public class ReadYmlByValue {        @Value("${userconfigvalueyml.name}")    public String name;    @Value("${userconfigvalueyml.age}")    public String age;    @Value("${userconfigvalueyml.sex}")    public String sex;    @Value("${userconfigvalueyml.email}")    public String email;    @Override    public String toString() {        return "ReadYmlByValue{" +                "name='" + name + '\'' +                ", age='" + age + '\'' +                ", sex='" + sex + '\'' +                ", email='" + email + '\'' +                '}';    }}
二、使用@PropertySource + @ConfigurationPropertiesproperties
@Component@ConfigurationProperties(prefix = "userconfigvalueproperties")@PropertySource(value = { "classpath:configValue.properties" })public class ReadPropertiesConfigValue {    private String name;    private String age;    private String email;    private String sex;    @Override    public String toString() {        return "ReadPropertiesConfigValue{" +                "name='" + name + '\'' +                ", age='" + age + '\'' +                ", email='" + email + '\'' +                ", sex='" + sex + '\'' +                '}';    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public void setEmail(String email) {        this.email = email;    }    public void setSex(String sex) {        this.sex = sex;    }}
@Component@ConfigurationProperties(prefix = "userconfigvalueyml")@PropertySource(value = { "classpath:configValue.yml" }, factory = CommPropertyResourceFactory.class)public class ReadYmlConfigValue {    private String name;    private String age;    private String email;    private String sex;    @Override    public String toString() {        return "ReadYmlConfigValue{" +                "name='" + name + '\'' +                ", age='" + age + '\'' +                ", email='" + email + '\'' +                ", sex='" + sex + '\'' +                '}';    }    public void setName(String name) {        this.name = name;    }    public void setAge(String age) {        this.age = age;    }    public void setEmail(String email) {        this.email = email;    }    public void setSex(String sex) {        this.sex = sex;    }}

由于@PropertySource是不支持yaml读取的,所以我们需要改造一下。

import org.springframework.boot.env.YamlPropertySourceLoader;import org.springframework.core.env.PropertySource;import org.springframework.core.io.support.DefaultPropertySourceFactory;import org.springframework.core.io.support.EncodedResource;import org.springframework.core.io.support.PropertySourceFactory;import org.springframework.lang.Nullable;import java.io.IOException;import java.util.List;import java.util.Optional;public class CommPropertyResourceFactory implements PropertySourceFactory {@Overridepublic PropertySource
createPropertySource(@Nullable String name, EncodedResource resource) throws IOException { String resourceName = Optional.ofNullable(name).orElse(resource.getResource().getFilename()); if (resourceName.endsWith(".yml") || resourceName.endsWith(".yaml")) { List
> yamlSources = new YamlPropertySourceLoader().load(resourceName, resource.getResource()); return yamlSources.get(0); } else { return new DefaultPropertySourceFactory() .createPropertySource(name, resource); }}}

在需要读取yaml的时候,要增加factory参数

@PropertySource(value = { "classpath:configValue.yml" }, factory = CommPropertyResourceFactory.class)

转载地址:http://yexzb.baihongyu.com/

你可能感兴趣的文章
深入了解JVM虚拟机8:Java的编译期优化与运行期优化
查看>>
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机11:Java内存异常原理与实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析3:Spring IOC容器的加载过程
查看>>
Spring源码剖析4:懒加载的单例Bean获取过程分析
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
Spring源码剖析7:AOP实现原理详解
查看>>
Spring源码剖析8:Spring事务概述
查看>>
Spring源码剖析9:Spring事务源码剖析
查看>>
重新学习Mysql数据库1:无废话MySQL入门
查看>>
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>
探索Redis设计与实现3:Redis内部数据结构详解——sds
查看>>
探索Redis设计与实现4:Redis内部数据结构详解——ziplist
查看>>
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>