基于SpringBoot的Java学习笔记-配置文件

参考:配置文件

配置文件

Spring Boot的默认配置文件在:src/main/resources/application.properties

关于Spring Boot应用的配置内容都可以集中在该文件中了,根据我们引入的不同Starter模块,可以在这里定义诸如:容器端口名、数据库链接信息、日志级别等各种配置信息。比如,我们需要自定义web模块的服务端口号,可以在application.properties中添加server.port=8888来指定服务端口为8888,也可以通过spring.application.name=hello来指定应用名(该名字在Spring Cloud应用中会被注册为服务名)。

也可以使用yaml文件来配置。

如:

server:
port: 8888
context-path: /hello
shutdown:
graceful: true
port: 8889
timeout: 30
enabled: true
path: /shutdown

对应的application.properties文件:

server.port=8888
server.context-path=/hello
server.shutdown.graceful=true
server.shutdown.port=8889
server.shutdown.timeout=30
server.shutdown.enabled=true
server.shutdown.path=/shutdown

自定义参数

在配置文件中可以定义一些自定义参数,如

book.name=Spring Boot 2.x

在Java代码中可以通过@Value注解来获取配置文件中的参数

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

还可以使用随机数

my.secret=${random.value}
my.number=${random.int}

命令行参数

在启动应用时,可以通过命令行参数来覆盖配置文件中的参数

java -jar myapp.jar --server.port=8888

--后面的参数会覆盖配置文件中的参数。

多环境配置

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

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

application.properties中通过spring.profiles.active来指定当前环境,如:

spring.profiles.active=dev

配置文件加载顺序

Spring Boot会按照如下顺序加载配置文件:

  • 命令行中传入的参数。
  • SPRING_APPLICATION_JSON中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。
  • java:comp/env中的JNDI属性。
  • Java的系统属性,可以通过System.getProperties()获得的内容。
  • 操作系统的环境变量
  • 通过random.*配置的随机属性
  • 位于当前应用jar包之外,针对不同{profile}环境的配置文件内容,例如:application-{profile}.properties或是YAML定义的配置文件
  • 位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如:application-{profile}.properties或是YAML定义的配置文件
  • 位于当前应用jar包之外的application.properties和YAML配置内容
  • 位于当前应用jar包之内的application.properties和YAML配置内容
  • 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性
  • 应用默认属性,使用SpringApplication.setDefaultProperties定义的内容

加密敏感信息

参考:Spring Boot 2.x敏感信息加密