日暮途远

日暮途远,涸辙难行;东隅已逝,桑榆非晚

Spring Boot 配置文件使用总结

application.properties是Spring Boot约定的配置文件。Spring Boot基于这个配置文件的配置机制充分体现了Spring Boot遵循的“约定优于配置”的原则。Spring Boot几乎所有的配置项都可以在这个文件中配置,如果不配置,则使用默认项。同时,如果Spring Boot检测到了特定的配置项(根据配置项的key匹配,properties中的配置项的key都有特殊含义的,除了自定义的配置项外,不可乱改)

本文将具体介绍一些在application.properties配置中的特性和使用方法。

Spring Boot允许外化(externalize)你的配置,这样你能够在不同的环境下使用相同的代码。你可以使用properties文件,YAML文件,环境变量和命令行参数来外化配置。使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment抽象或绑定到结构化对象来访问。

Spring Boot使用一个非常特别的PropertySource次序来允许对值进行合理的覆盖,需要以下面的次序考虑属性:

  1. 命令行参数
  2. 来自于java:comp/env的JNDI属性
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource
  6. 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
  7. 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
  8. 在@Configuration类上的@PropertySource注解
  9. 默认属性(使用SpringApplication.setDefaultProperties指定)

下面是一个具体的示例(假设你开发一个使用name属性的@Component):

 

你可以将一个application.properties文件捆绑到jar内,用来提供一个合理的默认name属性值。当运行在生产环境时,可以在jar外提供一个application.properties文件来覆盖name属性。对于一次性的测试,你可以使用特定的命令行开关启动(比如,java -jar app.jar –name=”Spring”)。

数据源配置

一旦检测到数据库配置相关的配置项(spring.datasoure.*),Spring Boot会自动根据相关配置项建立数据库连接池

随机数

在一些情况下,有些参数我们需要希望它不是一个固定的值,Spring Boot的属性配置文件中可以通过${random}来产生int值、long值或者string字符串,来支持属性的随机值。

例如:

多环境配置

Spring Boot 支持根据不同的环境使用不同的配置项,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包。就像我们Aone上配置的日常、预发、线上三套不同配置一样,然后通过autoconfig maven插件区分环境进行打包。

pring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

application-dev.properties:开发环境

application-test.properties:测试环境

application-prod.properties:生产环境

至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。

即有如下配置思路:

1、先application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置

2、然后application-{profile}.properties中配置各个环境不同的内容

3、最后通过命更改application.properties中spring.profiles.active的值或者直接通过命令行方式去激活不同环境的配置

点赞

发表评论

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">