spring boot自定义配置

spring boot配置文件中除了可以配置约定好的属性外,我们也可以在里面添加自己需要的配置信息。主要有两种方式。

@Value注解

使用@Value注解是用于逐个的读取自定义的配置,你想用哪个就将所需要的配置引进去。下面举一个例子。

我们首先在配置文件中添加我们自己的配置。

#自定义配置
boot.name=springboot
boot.location=北京

然后再新建一个controller来用于访问和读取配置文件中的值。

package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
* @Description: 使用@Value注解读取自定义配置
* @Author:      haoqiangwang3
* @CreateDate:  2019/12/30
*/
@RestController
public class ConfigInfoController {

    @Value("${boot.name}")
    private String name;

    @Value("${boot.location}")
    private String location;

    @RequestMapping("/config")
    public String config(){
        return "name=" + name + ";location=" + location;
    }
}

最后启动项目,并在浏览器中访问http://127.0.0.1:8088/demo/config,结果响应为:

 如果中文响应乱码,需要设置下idea的文件编码为UTF-8。

 

 @ConfigurationProperties

次注解用于将整个文件映射成一个对象。我们可以新建一个对象,用于接收配置文件里面的信息。如下:

package com.example.demo.config;

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

@Component
@ConfigurationProperties(prefix = "boot")
public class ConfigBo {
    private String name;

    private String location;

    public String getName() {
        return name;
    }

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

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

里面的@ConfigurationProperties中使用的前缀prefix属性,应为我们自定义的配置都是boot开头的,所以根据此特征,将前缀设置成boot。我们这个类还需要加@Component注解,把此类注入到spring容器中,才能使用@ConfigurationProperties功能。

然后我们修改controller类,将属性配置的实体引进去。

package com.example.demo.controller;

import com.example.demo.config.ConfigBo;

import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * @Description: 使用注解读取自定义配置 * @Author: haoqiangwang3 * @CreateDate: 2019/12/30 */ @RestController public class ConfigInfoController { @Resource private ConfigBo configBo; @RequestMapping("/configBo") public String configBo(){ return "name=" + configBo.getName() + ";location=" + configBo.getLocation(); } }

在浏览器中访问http://127.0.0.1:8088/demo/configBo,得到的效果如下:

 可以发现,这两种注解方式得到的效果是相同的。

注意:不要对同一个配置信息,引入两次。因为spring的加载机制是采用反射扫描的发现机制,在探测到Spring容器中有一个org.springframework.beans.factory.config.PropertyPlaceholderConfigurer的Bean就会停止对剩余PropertyPlaceholderConfigurer的扫描(Spring 3.1已经使用PropertySourcesPlaceholderConfigurer替代PropertyPlaceholderConfigurer了),所以根据加载的顺序,配置的第二个property-placeholder就被没有被spring加载,想引入的属性就不会被引入了。

posted @ 2019-12-30 11:29  wanghq1994  阅读(163)  评论(0编辑  收藏  举报