Spring Boot系列之配置读取

子曰:温故而知新,可以为师矣。周日还在学习的就真的是爱学习的人,周日大放送,这周的精彩文章推荐阅读:

  • 《分享的不仅仅是情怀》
  • 《反射面试题-请了解下》
  • 《Spring Boot Async异步执行任务》
  • 《面试题-实现多线程的方式》
  • 《Spring Boot系列之环境搭建》

Spring Boot里面所有的配置信息都放在application.properties中,如果我们想读取配置中的值要怎么做呢?

还需要自己写个读取属性文件的工具类吗?完全不要,我们可以通过各种方式来读取里面的值。

当然写工具类也是一种方式,只是太麻烦了,既然Spring Boot中有封装好的实现,为什么不用。

Environment方式读取

框架中有一个org.springframework.core.env.Environment类,可以读取application.properties中配置的值。

用法如下,我们可以看到直接将Environment注入进来,然后就可以使用getProperty方法来获取配置的值了,参数是配置的名称。

@RestController
public class ConfigController {

    @Autowired
    private Environment env;
    
    /**
     * 通过配置的key获取value<br>
     * {key:.+}是为了解决通过url参数访问的时候小数点丢失的问题
     * @param key
     * @return
     */
    @RequestMapping("/config/{key:.+}")
    Object getConfig(@PathVariable String key) {
        return env.getProperty(key);
    }
    
}

我们获取下之前配置的tomcat端口,http://localhost/spring-boot/config/server.port可以看到输出的结果正是你配置的值。

@Value注解方式读取

用法如下,通过注解的方式将要读取的值映射到这个字段上面,然后就可以直接使用了。

@RestController
public class ConfigController {

    /**
     * 读取application.properties中的配置值
     */
    @Value("${server.context-path}")
    private String contextPath;
    
    @RequestMapping("/config/contextpath")
    Object getConfigContextPath() {
        return contextPath;
    }
    
}

获取contextPath http://localhost/spring-boot/config/contextpath

自定义配置文件读取方式

系统自带的application.properties是配置一些框架相关的参数,当我们有一些关于业务方面的配置,如果配置在application.properties中就有点不合适了,这个时候就需要自定义配置文件了。

在没用Spring Boot之前也是建个属性文件,然后里面配置好值,用工具类去读取

当然也可以用Spring提供的PropertiesFactoryBean去读取,现在读取就更简单了

这边可以直接将配置信息映射成实体类,方便使用,首先定义个配置实体类

@ConfigurationProperties(locations = "classpath:config.properties", prefix = "config")
@Component
public class Config {
    @NotEmpty
    private String ip;
    private int port;
    
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public int getPort() {
        return port;
    }
    public void setPort(int port) {
        this.port = port;
    }
}

加上@Component和@ConfigurationProperties注解

@ConfigurationProperties中的locations用来指定你配置文件所在的路径

@ConfigurationProperties中的prefix用来指定你配置名称的前缀,如config.ip, config就是你上面定义的前缀

@ConfigurationProperties注解用的特别多,在很多starter包中都使用到了,比

如说mongodb的配置类:

@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties {
    /**
     * Default port used when the configured port is {@code null}.
     */
    public static final int DEFAULT_PORT = 27017;
    /**
     * Mongo server host.
     */
    private String host;
    /**
     * Mongo server port.
     */
    private Integer port = null;
    // ....
}

这边在ip字段上还加了个@NotEmpty注解来防止忘记配置值了,如果你没配置ip的值,那么在启动的程序的时候框架将提示你

***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target com.cxytiandi.config.Config@2af616d3 failed:
    Property: config.ip
    Value: null
    Reason: 不能为空
Action:
Update your application's configuration

然后我们创建个config.properties放在classpath下

config.ip=192.168.1.1
config.port=8080

使用就直接注入Config类就行了

@RestController
public class ConfigController {

    @Autowired
    private Config config;
    
    @RequestMapping("/config")
    Object queryConfig() {
        return config;
    }
    
}

这边通过地址获取下配置信息:http://localhost/spring-boot/config 可以看到结果

{"ip":"192.168.1.1","port":8080}

原文发布于微信公众号 - 猿天地(cxytiandi)

原文发表时间:2018-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏坚毅的PHP

memcache 问题 socket or its streams already null in trueClose call

问题现象: 20台服务器有一台报monitor错误 ,查询日志: 05 11 09:37:48 [MaintThread] ERROR memcached.So...

3935
来自专栏编程直播室

Spring Boot 之 Spring Data JPA 二 ( Query By Example)1 新建Spring Boot工程2 新建实体3 新建Repository4 新建一Service

2303
来自专栏Java学习网

java开发中spring和springboot常用注解总结,开发人员必学

这个注解可以用于类和方法上,用于类上,表示父路径,如类上是demo,方法上是/demo1,那么访问路径就是demo/demo1

1315
来自专栏大闲人柴毛毛

Spring速查手册——Bean装配

Spring提供三种Bean的装配方式,分别是: 1. 自动装配Bean 2. 在Java中装配Bean 3. 在XML中装配Bean 1. 自动...

3648
来自专栏杨建荣的学习笔记

内核参数导致的备库宕机分析 (一)r7笔记第23天

在前几天搭建好备库之后,因为同步文件着实花了些时间,首先配置备库能够正常接收归档,然后内核参数也基本没有设置,简单使用脚本算出一个 Hugepage的值,就直接...

3677
来自专栏代码拾遗

Spring Boot 2.0 教程 - 深入SpringAplication

可以通过SpringApplication.run() 方法轻松的启动一个Spring应用,例如

1174
来自专栏JavaNew

Spring Boot实战:Restful API的构建

1705
来自专栏zhisheng

Spring Boot 2.0系列文章(六):Spring Boot 2.0中SpringBootApplication注解详解

转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/19/SpringBootApplication-annot...

1461
来自专栏Java大联盟

SpringMVC笔记(9):国际化

所谓国际化就是指WEB应用在不同的浏览环境中显示不同的语言,如汉语、英语等。Spring MVC框架对国际化操作做了很好的集成,只需简单配置即可完成国际化。

611
来自专栏Java帮帮-微信公众号-技术文章全总结

Java开发Spring第一天

今日内容 Spring框架的概述 Spring的快速入门 IoC容器装配Bean(xml配置方式) Ioc容器装配Bean(注解方式) 在web项目中集成Sp...

3269

扫码关注云+社区

领取腾讯云代金券