spring boot学习2之properties配置文件读取

      在spring boot学习1 时,知道spring boot会默认读取配置application.properties。那如果我们直接在application.properties添加自定义的配置项时,如何读取?或者不想把所有的配置都放在application.properties中,而是自定义一个properties文件时,又该如何读取呢?难道还需自己写代码加载读取配置文件吗?

注:下面代码是在spring boot 1.5.2版本下写的。

pom.xml

 <parent>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-parent</artifactId>
	    <version>1.5.2.RELEASE</version>
	</parent>   
	<dependencies>
	    <dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-web</artifactId>
	    </dependency>
		</dependencies>


@Value

   使用@Value注入写在application.properties中的配置项
application.properties
logging.config=classpath:logback.xml
logging.path=d:/logs


##tomcat set###
server.port=80
#session 超时时间
server.session-timeout=60
###########

hello=hello china!!!

class.schoolName=china school
class.className=second grade three class
class.students[0].name=tom
class.students[1].name=jack

在代码中@Value注入到属性中
@Controller
@RequestMapping("/")
public class HelloController {

	public static Logger LOG = LoggerFactory.getLogger(HelloController.class);
	
	@Value("${hello}")
	private String hello;
	
	@Value("${class.schoolName}")
	private String schoolName;

@ConfigurationProperties

 如果想把某种相关的配置,注入到某个配置类中,比如上面的application.properties中看到class.xx的配置项,想注入到ClassConfig配置类中
package com.fei.springboot.config;

import java.util.ArrayList;
import java.util.List;

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

@Component("classConfig")
@ConfigurationProperties(prefix="class")
public class ClassConfig {

	private String schoolName;
	
	private String className;
	
	private List<StudentConfig> students = new ArrayList<StudentConfig>();

	public String getSchoolName() {
		return schoolName;
	}

	public void setSchoolName(String schoolName) {
		this.schoolName = schoolName;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public void setStudents(List<StudentConfig> students) {
		this.students = students;
	}

	public String getClassName() {
		return className;
	}

	public List<StudentConfig> getStudents() {
		return students;
	}
	
	
}
 这样就会把application.properties中以class.开头的配置项给注入进来
我们看到代码中@ConfigurationProperties并没有指明properties,那默认的就是application.properties。那是否有地方指明properties的路径呢?在版本1.5.1之前可以@ConfigurationProperties(prefix="class",location="classpath:/customer.properties"),但是1.5.2版本没有location了,需要用@PropertySource("classpath:/student.properties")
package com.fei.springboot.config;

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

@Component("studentConfig")
@ConfigurationProperties
@PropertySource("classpath:/student.properties")
public class StudentConfig {

	private String name;
	

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
}

测试下
package com.fei.springboot.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.fei.springboot.config.ClassConfig;
import com.fei.springboot.config.StudentConfig;

@Controller
@RequestMapping("/")
public class HelloController {

	public static Logger LOG = LoggerFactory.getLogger(HelloController.class);
	
	@Value("${hello}")
	private String hello;
	
	@Value("${class.schoolName}")
	private String schoolName;
	
	@Autowired
	private ClassConfig classConfig;
	
	@Autowired
	private StudentConfig studentConfig;
	
	@RequestMapping(value="/hello")
	@ResponseBody
	public String hello(){
		System.out.println("=======使用@Value注入获取.....===========");
		System.out.println("hello="+hello+"   schoolName=" + schoolName);
		System.out.println("======使用@ConfigurationProperties注入获取.....============");
		System.out.println("schoolName=" + classConfig.getSchoolName());
		System.out.println("className=" + classConfig.getClassName());
		System.out.println("student[0].name=" + classConfig.getStudents().get(0).getName());
		
		System.out.println("studentConfig...name=" + studentConfig.getName());
		
		return "hello";
	}
}
打印结果
2017-05-17 15:20:49.677  INFO 72996 --- [p-nio-80-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 19 ms
2017-05-17 15:20:49.677 [http-nio-80-exec-1] INFO  o.s.web.servlet.DispatcherServlet - FrameworkServlet 'dispatcherServlet': initialization completed in 19 ms
=======使用@Value注入获取.....===========
hello=hello china!!!   schoolName=china school
======使用@ConfigurationProperties注入获取.....============
schoolName=china school
className=second grade three class
student[0].name=tom
studentConfig...name=xiao hong


 源码下载



  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值