Spring Boot学习笔记----读取配置文件

Springboot默认配置信息,都放置在application.properties文件中,位于工程目录的src/main/resource下。

这里写图片描述

本文记录两种方法
(1)如何获取默认配置信息
(2)如何获取自定义配置信息

常见问题
(1)Spring Boot Annotion processor not found in classpath
(2)Re-run Spring Boot Configuration Annotation Processor to update generated metadata

如何获取默认配置信息

配置信息可以通过@Value与属性变量进行绑定。

例如,在application.properties文件中定义如下变量

Test.fileName="1.txt"
path=C:/output
fileNum=1

我们在Controller中,进行变量绑定,然后打印内容。核心代码如下

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


@RestController
public class ConfigController {

    Logger logger= LoggerFactory.getLogger(ConfigController.class);

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

    @Value("${path}")
    private String path;

    @Value("${fileNum}")
    private int num;

    @RequestMapping("/getConfig")
    public void getConfig(){
        logger.info("fileName="+name);
        logger.info("path="+path);
        logger.info("fileNum="+num);
    }
}

执行结果如下

2017-12-06 11:06:34.461  INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController  : fileName="1.txt"
2017-12-06 11:06:34.461  INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController  : path=C:/output
2017-12-06 11:06:34.461  INFO 9504 --- [nio-8080-exec-6] com.gemalto.configtest.ConfigController  : fileNum=1

如果配置具有相同的prefix,那么可以使用@ConfigurationProperties(prefix=”my”)进行简化绑定。

例如,我们在application.properties中添加

my.name=breakloop1
my.age=10
my.location=BJ1

读取时,我们创建配置类MyConfigController2。

@RestController
@ConfigurationProperties(prefix="my")
public class MyConfigController2 {

    Logger logger= LoggerFactory.getLogger(MyConfigController2.class);

    private String name;

    private int age;

    private String location;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getLocation() {
        return location;
    }

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

    public void setAge(int age) {
        this.age = age;
    }

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

    @RequestMapping("/getMyConfig2")
    public void getMyConfig(){
        logger.info("my name is "+name+", "+ age +" years old, "+location);
    }

}

执行结果如下:

2017-12-06 12:12:03.387  INFO 8504 --- [nio-8080-exec-6] c.g.configtest.MyConfigController2       : my name is breakloop1, 10 years old, BJ1

如果不想使用@Value进行绑定,这里需要注意以下几点:
(1)属性变量名称,需要跟配置中的名称一致
(2)需要提供getter和setter

如何获取自定义配置信息

通常,将自定义配置文件也放置在src/main/resource下。当然也可以创建子目录保存不同的配置,便于管理。

例如,我们在src/main/resource下创建custom目录,并添加my.properties文件,文件内容如下

my.name=breakloop
my.age=1
my.location=BJ

读取配置信息时,需要使用@PropertySource(“classpath:custom/my.properties”)来绑定配置文件。

这里需要强调的是,网上很多版本都是使用@ConfigurationProperties进行绑定的。绑定格式如下

@ConfigurationProperties(location="classpath:custom/my.properties")

但在Spring boot1.5.1之后,就废除了location参数,转而使用@PropertySource指定配置文件路径。

核心代码如下:

@RestController
@PropertySource("classpath:custom/my.properties")
public class MyConfigController {

    Logger logger= LoggerFactory.getLogger(MyConfigController.class);

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

    @Value("${my.age}")
    private int age;

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

    @RequestMapping("/getMyConfig")
    public void getMyConfig(){
        logger.info("my name is "+name+", "+age+" years old, "+location);
    }

}

执行结果如下:

2017-12-06 11:29:16.024  INFO 9256 --- [nio-8080-exec-5] c.gemalto.configtest.MyConfigController  : my name is breakloop, 1 years old, BJ

常见问题处理

(1)Spring Boot Annotion processor not found in classpath

需要在pom中添加dependences

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

(2)Re-run Spring Boot Configuration Annotation Processor to update generated metadata

该提示,不影响代码执行。只是提醒用户,进行必要的重新编译。再当文件进行了有效的更新时,该提示也会消失。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值