SpringBoot学习:读取yml和properties文件的内容

一、在SpringBoot实现属性注入:

  1)、添加pom依赖jar包;

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

  2)、在yml配置文件中:

 1 #pojo属性注入
 2 Mybar: #pojo中的prefix值
 3   name: 张三
 4   arrs: 赵,钱,孙,李
 5   nameList:
 6     - name: 刘
 7       value: 刘备
 8     - name: 张
 9       value: 张飞
10   BarNameList:
11   - 早退次数
12   - 迟到次数
13   - 旷工天数
14   map:
15     key1: 曹操
16     key2: 曹丕
17     key3: 曹植

  3)、pojo通过set、get方法获取呀,yml中的值

 1 package cn.com.venus.oa.pojo;
 2
 3 import java.util.List;
 4 import java.util.Map;
 5
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.beans.factory.annotation.Value;
 8 import org.springframework.boot.context.properties.ConfigurationProperties;
 9 import org.springframework.stereotype.Component;
10
11 /**
12  * 加载yaml配置文件的方法
13  * spring-boot更新到1.5.2版本后locations属性无法使用
14  * @PropertySource注解只可以加载proprties文件,无法加载yaml文件
15  * 故现在把数据放到application.yml文件中,spring-boot启动时会加载
16  */
17 @Component
18 @ConfigurationProperties(prefix="Mybar")
19 public class Bar {
20     private String name;
21
22     private String[] arrs;
23
24     private List<Map<String,String>> nameList;
25
26     private List<String> BarNameList;
27
28     private Map<String,String> map;
29
30     public String getName() {
31         return name;
32     }
33
34     //String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要
35     public void setName(String name) {
36         this.name = name;
37     }
38
39     public String[] getArrs() {
40         return arrs;
41     }
42
43     public void setArrs(String[] arrs) {
44         this.arrs = arrs;
45     }
46
47     public Map<String, String> getMap() {
48         return map;
49     }
50
51     public void setMap(Map<String, String> map) {
52         this.map = map;
53     }
54
55     public List<Map<String, String>> getNameList() {
56         return nameList;
57     }
58
59     public void setNameList(List<Map<String, String>> nameList) {
60         this.nameList = nameList;
61     }
62
63     public List<String> getBarNameList() {
64         return BarNameList;
65     }
66
67     public void setBarNameList(List<String> barNameList) {
68         BarNameList = barNameList;
69     }
70
71
72 }

  4)、最终在Controller中执行自动注入就可以完成yml配置属性值:

1 @Autowired
2 private  Bar bar;

二、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注解

 1 @Autowired
 2     private Environment env;
 3     @Value("${age}")
 4     String name;
 5
 6
 7     @RequestMapping("/")
 8     @ResponseBody
 9     String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {
10         logger.info("测试通过!!!");
11         ObjectMapper objectMapper = new ObjectMapper();
12         //测试加载yml文件
13         System.out.println("simpleProp: " + config.getSimpleProp());
14         System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));
15         System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));
16         System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));
17         System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));
18
19         //测试加载properties文件
20         System.out.println(env.getProperty("name"));//孙凯
21         System.out.println(env.getProperty("abc"));//null
22         System.out.println(name);//26
23
24         return "Hello World!";
25     }  
时间: 2024-10-06 14:23:52

SpringBoot学习:读取yml和properties文件的内容的相关文章

【Java编程】写入、读取、遍历Properties文件

在Java开发中通常我们会存储配置参数信息到属性文件,这样的属性文件可以是拥有键值对的属性文件,也可以是XML文件,关于XML文件的操作,请参考博文[Java编程]DOM XML Parser 解析.遍历.创建XML.在该篇博文中,我将展示如何向属性文件写入键值对,如何读取属性文件中的键值对,如何遍历属性文件. 1.向属性文件中写入键值对 特别注意: Properties类调用setProperty方法将键值对保存到内存中,此时可以通过getProperty方法读取,propertyNames(

Java 程序 关于Properties 类使用Store方法时不能会覆盖以前Properties 文件的内容

F:\\Demo.properties 文件内容: #\u65B0\u589E\u4FE1\u606F#Wed Sep 14 11:16:24 CST 2016province=广东tt=近蛋city=佛山市 java代码: public static void test() throws IOException {        FileWriter writer = new FileWriter("F:\\Demo.properties");        FileReader r

spring 如何动态加载properties文件的内容

1. 在xml中配置你的properties路径: <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basenames"> <list> <!-- 指定资源文件基名称 jdbc为文件名,不包含扩展名 --&g

Spring中配置和读取多个Properties文件

public class PropertiesFactoryBeanextends PropertiesLoaderSupportimplements FactoryBean, InitializingBean Allows for making a properties file from a classpath location available as Properties instance in a bean factory. Can be used to populate any be

Maven组织的web项目读取WEB-INF下properties文件

开发时经常要读取properties文件的配置信息,但是properties文件所在的位置和properties访问方式不同读取方式也不同 1.访问方式一般分:java项目和web项目. 2.文件位置:与源文件相同目录和与源目录不相同 java项目与源文件相同目录读取properties文件方法,在main函数中读取 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOExc

Spring中配置和读取多个Properties文件--转

public class PropertiesFactoryBeanextends PropertiesLoaderSupportimplements FactoryBean, InitializingBean Allows for making a properties file from a classpath location available as Properties instance in a bean factory. Can be used to populate any be

获取tomcat上properties文件的内容——方便文件存储位置的修改,解耦和

在java web开发的时候经常会用到读取读取或存放文件,这个文件的默认路径在哪里呢?写死在程序里面显然是可以的,但这样子不利于位于,假如有一天项目从window移植到linux,或者保存文件的路径变了,就需要去源代码中查找,进行替换,这样子不仅效率低,而且程序的耦合度也会过高,这里我用了一个properties文件用于存放文件的保存路径,需要保存或者读取都来自己properties所保存的路径. 1.我存放的propeities文件路径 因为linux和window上面的分盘是不一样的,所以我

【ASP.NET 进阶】定时执行任务实现 (定时读取和修改txt文件数字内容,无刷新显示结果)

现在有很多网站或系统需要在服务端定时做某件事情,如每天早上8点半清理数据库中的无效数据等等,Demo 具体实现步骤如下: 0.先看解决方案截图 1.创建ASP.NET项目TimedTask,然后新建一个全局应用程序类文件 Global.asax 2.然后在Application_Start 事件中 启动定时器,如需要每隔多少秒来做一件事情,即在后台执行,与客户端无关,即使客户端全部都关闭,那么后台仍然执行,具体代码如下: using System; using System.Collection

Springboot中读取.yml文件

自定义配置文件application-dev.yml 1 spring: 2 dataresource: 3 druid: 4 driver-class-name: com.mysql.jdbc.Driver 5 url: jdbc:mysql://127.0.0.1:3306/appcloud?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC 6 username: root 7 password: root 创建一个实