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}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot读取配置文件常用方法解析

    首先回忆一下在没有使用SpringBoot之前也就是传统的spring项目中是如何读取配置文件,通过I/O流读取指定路径的配置文件,然后再去获取指定的配置信息. 传统项目读取配置方式# 读取xml配置文件 public String readFromXml(String xmlPath, String property) { SAXReader reader = new SAXReader(); Document doc = null; try { doc = reader.read(new F

  • 详解springboot + profile(不同环境读取不同配置)

    具体做法: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中:prod环境下的配置配置在application-prod.properties中. 在application.properties中指定使用哪一个文件 1.application-dev.properties(dev环境下的配置) profile = dev_envrimont 2.application-prod.properties(prod环境下的配置) pr

  • SpringBoot项目启动时如何读取配置以及初始化资源

    介绍   在开发过程中,我们有时候会遇到非接口调用而出发程序执行任务的一些场景,比如我们使用quartz定时框架通过配置文件来启动定时任务时,或者一些初始化资源场景等触发的任务执行场景. 方法一:注解 方案   通过使用注解@Configuration和@Bean来初始化资源,配置文件当然还是通过@Value进行注入. @Configuration:用于定义配置类,可替换xml配置文件,被注解的类内部一般是包含了一个或者多个@Bean注解的方法. @Bean:产生一个Bean对象,然后将Bean

  • 详解Spring Boot读取配置文件与配置文件优先级

    Spring Boot读取配置文件 1)通过注入ApplicationContext 或者 Environment对象来读取配置文件里的配置信息. package com.ivan.config.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframe

  • 如何解决springboot读取配置文件的中文乱码问题

    在application.properties中填写中文信息,在读取该文件时会出现中文乱码问题. 比如:application.properties内容: student.name=小康 student.age=15 解决方法:我用的是IDEA,首先File->settings->Code style->File Encoding 把所有的编码都设为UTF-8就好了. 再次运行,得出正常结果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们.

  • springboot读取配置文件中的参数具体步骤

    springBoot是java开发中会经常用到的框架,那么在实际项目中项目配置了springBoot框架,应该如何在项目中读取配置文件中的参数呢? 1.打开eclipse开发工具软件. 2.在项目中确保pom.xml文件已引用了[spring-boot-starter-web]jar包. 因为springBoot启动的时候会自动去获取项目中在resources文件录目下的名为application.properties参数配置文件. 3.在项目中的src/main/resource文件录目下创建

  • 在SpringBoot下读取自定义properties配置文件的方法

    SpringBoot工程默认读取application.properties配置文件.如果需要自定义properties文件,如何读取呢? 一.在resource中新建.properties文件 在resource目录下新建一个config文件夹,然后新建一个.properties文件放在该文件夹下.如图remote.properties所示 二.编写配置文件 remote.uploadFilesUrl=/resource/files/ remote.uploadPicUrl=/resource

  • 详解springboot读取yml配置的几种方式

    yml 文件规则 yml文件的好处,天然的树状结构,一目了然,实质上跟properties是差不多的. 不支持tab缩进 可以使用 "-小写字母" 或 "_小写字母"来 代替 "大写字母",如 userName 与 user-name ,user_name 含义是一样的 key: value 格式书写 key 后面跟着冒号,再后面跟着一个空格,然后是值 几种数据格式的表示方式 1.普通的值(数字,字符串,布尔) 2.对象.Map (属性和值) (

  • Spring Boot配置读取实现方法解析

    Spring Boot里面所有的配置信息都放在application.properties中,如果我们想读取配置中的值要怎么做呢? 还需要自己写个读取属性文件的工具类吗?完全不要,我们可以通过各种方式来读取里面的值. 当然写工具类也是一种方式,只是太麻烦了,既然Spring Boot中有封装好的实现,为什么不用. Environment方式读取 框架中有一个org.springframework.core.env.Environment类,可以读取application.properties中配

  • Spring Boot 初始化运行特定方法解析

    Spring Boot提供了两种 "开机自启动" 的方式,ApplicationRunner和CommandLineRunner 这两种方式的目的是为了满足,在容器启动时like执行某些方法.我们可以通过实现ApplicationRunner或者CommandLineRunner来实现,他们都是在SpringAppliaction执行之后开始执行的.这个特性可以让我们自定义一些在容器启动时需要初始化的逻辑 ApplicationRunner接口: 官方doc: Interface us

  • Spring Boot配置元数据方法教程

    这篇文章主要介绍了Spring Boot配置元数据方法教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean上是非常有用的.但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot Configuration Processor和 关联的 JSON 元数据文件,该 JSON 文档记录每个属性的含义.约束等. 配置元数据 作为开发人员

  • Spring Boot 配置 IDEA和DevTools 热部署的方法

    MAVEN 配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/

  • spring boot配置MySQL数据库连接、Hikari连接池和Mybatis的简单配置方法

    此方法为极简配置,支持MySQL数据库多库连接.支持Hikari连接池.支持MyBatis(包括Dao类和xml文件位置的配置). 1.pom.xml中引入依赖: <!-- Begin of DB related --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId>

  • Spring Boot 配置 Quartz 定时任务的方法

    Quartz有四个核心概念: Job:是一个接口,只定义一个方法 execute(JobExecutionContext context),在实现接口的 execute 方法中编写所需要定时执行的 Job(任务) Double slongitude = Double.valueOf(jobExecutionContext.getJobDetail().getJobDataMap().get("slongitude").toString()); JobDetail:Quartz 每次调度

  • Spring Boot配置特定属性spring.profiles的方法

    Spring Boot配置特定属性spring.profiles SpringBoot能使用application- {你的自定义profile名称myProfileName} .properties模式添加任何你指定配置文件到其属性文件. 要加载特定的配置文件属性文件,我们可以使用命令行选项-Dspring.profiles.active = myProfileName. 缺省默认SpringBoot是加载application.properties,无需任何-Dspring.profile.

  • Java之Spring注解配置bean实例代码解析

    前面几篇均是使用xml配置bean,如果有上百个bean,这是不可想象的.故而,请使用注解配置bean !!! [1]注解类别 @Component : 基本注解, 标识了一个受 Spring(点击这里可以下载<Spring应用开发完全手册>) 管理的组件 @Repository : 标识持久层组件 @Service : 标识服务层(业务层)组件 @Controller : 标识表现层组件 Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件. 对于扫描到的组

  • spring boot jar的启动原理解析

     1.前言 近来有空对公司的open api平台进行了些优化,然后在打出jar包的时候,突然想到以前都是对spring boot使用很熟练,但是从来都不知道spring boot打出的jar的启动原理,然后这回将jar解开了看了下,与想象中确实大不一样,以下就是对解压出来的jar的完整分析. 2.jar的结构 spring boot的应用程序就不贴出来了,一个较简单的demo打出的结构都是类似,另外我采用的spring boot的版本为1.4.1.RELEASE网上有另外一篇文章对spring

  • Spring Boot 文件上传原理解析

    首先我们要知道什么是Spring Boot,这里简单说一下,Spring Boot可以看作是一个框架中的框架--->集成了各种框架,像security.jpa.data.cloud等等,它无须关心配置可以快速启动开发,有兴趣可以了解下自动化配置实现原理,本质上是 spring 4.0的条件化配置实现,深抛下注解,就会看到了. 说Spring Boot 文件上传原理 其实就是Spring MVC,因为这部分工作是Spring MVC做的而不是Spring Boot,那么,SpringMVC又是怎么

随机推荐