SpringBoot基础之配置详解

简介: SpringBoot基础之配置详解

大家好,我是二师兄,本篇文章为大家讲解SpringBoot相关配置功能,包括配置文件、外部配置、属性注入等。


配置文件


基本配置支持


创建SpringBoot项目,会在src/main/resources目录下生成application.properties文件,这就是SpringBoot默认指定的配置文件。基本使用方式如下:



server.port=8080server.servlet.context-path=/hello

同时,SpringBoot也支持YAML格式的配置,同样将application.yml文件放置在resources目录下即可。YAML是以数据为中心的语言,配置的时候具有面向对象的特性。这两种配置形式都是SpringBoot推荐的,但对于比较复杂的数据来说,yaml的配置要优于propertiesyaml配置具体示例:





server:   port: 8080   servlet:      context-path: /hello

YAML基本要求:

  • YAML大小写敏感;
  • 使用缩进代表层级关系;
  • 缩进只能使用空格,不能使用TAB,不要求空格个数,只需要相同层级左对齐(一般2个或4个空格)


如果一个项目中同时出现application.propertiesapplication.yml文件配置的话,SpringBoot会如何处理呢?会优先使用properties中属性,然后再考虑使用yml文件中的属性。比如,上面的例子中,如果properties中不配置port,而yml配置port8081,则启动后端口为8081,但是如果properties中配置为8080,则启动时以properties为准。


配置文件源代码解析


为什么我们将配置文件放置在resources目录下,SpringBoot就可以帮忙我们进行解析加载?下面通过源代码看一下SpringBoot默认会扫描哪些路径下的哪些配置文件。来看一下ConfigFileApplicationListener类,该类在spring-boot包下,通过该类的注释可以了解到基本的加载信息。















package org.springframework.boot.context.config;
public class ConfigFileApplicationListener    implements EnvironmentPostProcessor, SmartApplicationListener, Ordered {
  private static final String DEFAULT_PROPERTIES = "defaultProperties";
  // Note the order is from least to most specific (last one wins)  private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";
  private static final String DEFAULT_NAMES = “application”;
      // 省略其他代码}

通过该类的常量定义,我们可以看到,默认加载的配置文件名为application,会加载以下目录下的配置文件:classpath目录、classpath目录下的config目录、工程根目录下、工程根目录的config目录下。


它们的优先级依次为:

  • 工程根目录:./config/
  • 工程根目录:./
  • classpath:/config/
  • classpath:/


SpringBoot也支持通过命令来指定配置文件的位置:


--spring.config.location=/usr/local/config/


使用xml配置


当无法避免使用xml配置时,可以采用@ImportResources来进行xml配置的加载。



@ImportResource("classpath:mq.xml")


命令行参数配置


除了上面的参数配置之外,SpringBoot还提供了命令参数配置,比如在运行jar -jar时可以添加一些额外的参数来进行指定。


java -jar xx.jar —server.port=8080

此种方式的优先级最高。


自定义配置属性


除了可以按照SpringBoot的约定配置参数之外,我们还可以自定义一些参数,然后通过@Value@ConfigurationProperties进行配置。也可以不使用默认的配置文件名,而通过@PropertiesSource进行配置文件路径的指定。


@Value注入属性值


application配置文件中自定义好具体的属性,然后通过@Value注解在需要使用的地方进行注入。属性的自定义:






# 自定义属性admin.name=Tomadmin.age=25admin.phone=156********

在需要对应属性的地方注解使用,其中在表达冒号后面的Guest为指定的默认值,即如果找不到admin.name,则使用此默认值。








@Value("${admin.name:Guest}")private String adminName;
@RequestMapping("/hello")public String hello(){  return "Hello admin:" + adminName + "!";}

 

@ConfigurationProperties配置


SpringBoot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将一组配置和一个Bean关联起来,批量进行类型安全的自动注入。











@Component@PropertySource("classpath:my.properties")@ConfigurationProperties(prefix = "admin")public class SystemAdmin {
  private String name;
  private int age;       // 省略getter/setter方法}


其中,@Component表示将此类实例化,@PropertySource指定自定义的properties文件,@ConfigurationProperties(prefix = “admin”)指定实现配置属性和bean直接的关联,prefix指定匹配属性的前缀都以admin开始。


@ConfigurationProperties的使用支持松散绑定,如:驼峰命名(userName)、横干拼接(user-name)、下划线(user_name)之间可以互相识别绑定。


绑定对象的使用:








@Resourceprivate SystemAdmin systemAdmin;
@RequestMapping("/hello")public String hello(){  return "Hello admin:" + systemAdmin.getName() + "!";}


profile配置


在真是实践中,我们的配置文件会根据不同的环境有不同的配置文件,SpringBoot也为我们准备好了相应的配置。首先不同环境的配置按照指定的格式进行命名。比如:


  • 开发环境:application-dev.properties
  • 测试环境:application-test.properties
  • 生产环境:application-prod.properties


Spring Boot 则通过 application.properties 文件中设置 spring.profiles.active 属性来指定加载文件。比如,参数值配置为 dev ,则加载的是 application-dev.properties

目录
相关文章
|
XML Java 测试技术
SpringBoot入门篇 01、Springboot入门及配置(二)
SpringBoot入门篇 01、Springboot入门及配置(二)
|
SQL 存储 Java
SpringBoot基础学习文章
SpringBoot基础学习文章
162 0
SpringBoot基础学习文章
|
NoSQL 安全 Java
SpringBoot 自动配置的原理|学习笔记
快速学习 SpringBoot 自动配置的原理
136 0
SpringBoot 自动配置的原理|学习笔记
|
Java Maven Spring
SpringBoot2.x基础篇:开发你的第一个SpringBoot应用程序
`SpringBoot2.x`版本是基于`Java8`来编写的,由于内部使用到了很多新的特性,比如:`lambda`、`interface default`...,所以需要本地开发环境有`java8`的支持。
|
Java 容器
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
`SpringBoot`在不断地版本迭代中陆续提供了不同的配置参数绑定的方式,我们可以单独获取`一个配置参数`也可以将`一系列的配置`映射绑定到`JavaBean`的属性字段,下面我们来看看这几种方式的配置绑定哪一种是你最常用到的。
SpringBoot2.x基础篇:谈谈SpringBoot内提供的这几种配置绑定
SpringBoot使用@ConstructorBinding注解进行配置属性绑定
`SpringBoot2.2`版本发行后一些新的功能也渐渐的浮出了水面,在之前版本`SpringBoot`的配置文件与类之间的属性绑定(`@ConfigurationProperties`)是通过`Setter`方法来进行绑定对应的配置值,而从`2.2`版本开始支持了`构造函数`的方式进行绑定。
|
XML JSON 开发框架
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
关于SpringBoot的自动配置和启动过程
|
Java 容器
SpringBoot的启动配置原理
介绍SpringBoot的启动配置原理
|
运维 NoSQL 小程序
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
325 0
springboot配置webservice服务发布
springboot配置webservice服务发布
332 0