spring-boot 应用配置文件(.properties或.yml)

1、应用配置文件(.properties或.yml)

.properties在配置文件中直接写:

name=Isea533
server.port=8080

.yml格式的配置文件如:

name: Isea533
server:
port: 8080

属性配置文件的位置

spring会从classpath下的/config目录或者classpath的根目录查找application.propertiesapplication.yml

/config优先于classpath根目录

2、java中获取配置信息

@Value(“${xxx}”)

这种方式是最简单的,通过@Value注解可以将属性值注入进来。

假如我们要配置一个类别下的多个属性,

比如mysql的jdbc连接配置

mysql.jdbcName=com.mysql.jdbc.Driver

mysql.dbUrl=jdbc:mysql://localhost:3306/db_diary

mysql.userName=root

mysql.password=123456

我们贴到application.properties

然后按照前面的方案,我们在Controller里写四个属性;

package com.java1234;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class HelloWorldController {
 
    @Value("${helloWorld}")
    private String helloWorld;
     
    @Value("${mysql.jdbcName}")
    private String jdbcName;
     
    @Value("${mysql.dbUrl}")
    private String dbUrl;
     
    @Value("${mysql.userName}")
    private String userName;
     
    @Value("${mysql.password}")
    private String password;
     
    @RequestMapping("/hello")
    public String say(){
        return helloWorld;
    }
     
    @RequestMapping("/showJdbc")
    public String showJdbc(){
        return "mysql.jdbcName:"+jdbcName+"<br/>"
              +"mysql.dbUrl:"+dbUrl+"<br/>"
              +"mysql.userName:"+userName+"<br/>"
              +"mysql.password:"+password;
               
    }
}

 

@ConfigurationProperties

Spring Boot 可以方便的将属性注入到一个配置对象中。例如:

my.name=Isea533
my.port=8080
my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

对应对象:

@ConfigurationProperties(prefix="my")
public class Config {
    private String name;
    private Integer port;
    private List<String> servers = new ArrayList<String>();

    public String geName(){
        return this.name;
    }

    public Integer gePort(){
        return this.port;
    }
    public List<String> getServers() {
        return this.servers;
    }
}

Spring Boot 会自动将prefix="my"前缀为my的属性注入进来。

Spring Boot 会自动转换类型,当使用List的时候需要注意在配置中对List进行初始化!

Spring Boot 还支持嵌套属性注入,例如:

name=isea533
jdbc.username=root
jdbc.password=root
...

对应的配置类:

@ConfigurationProperties
public class Config {
    private String name;
    private Jdbc jdbc;
    class Jdbc {
        private String username;
        private String password;
        //getter...
    }

    public Integer gePort(){
        return this.port;
    }
    public Jdbc getJdbc() {
        return this.jdbc;
    }
}

jdbc开头的属性都会注入到Jdbc对象中。

 

在@Bean方法上使用@ConfigurationProperties

@ConfigurationProperties(prefix = "foo")
@Bean
public FooComponent fooComponent() {
    ...
}

Spring Boot 会将foo开头的属性按照名字匹配注入到FooComponent对象中。

 

3、属性名匹配规则

例如有如下配置对象:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {

    private String firstName;

}

firstName可以使用的属性名如下:

  1. person.firstName,标准的驼峰式命名
  2. person.first-name,虚线(-)分割方式,推荐在.properties.yml配置文件中使用
  3. PERSON_FIRST_NAME,大写下划线形式,建议在系统环境变量中使用 
posted @ 2018-01-10 11:12  支照  阅读(570)  评论(0编辑  收藏  举报