Spring Boot教程(16) – 属性配置

Spring Boot的特点就是自动配置,开箱即用。它按照业界一些常见的做法去配置项目,如果你代码跑起来之后,感觉够用了,就不用再操心。如果感觉不够用,就需要自己定义一些属性来满足你的需求。使用Spring Initializr或者IDE创建项目之后,在src/main/resources目录下会有个application.properties文件,它就是用来保存你的自定义配置的,每条配置使用”key=value”的形式,大概长这样:

相信你肯定用过了,网上各种教程基本开头都会教你配置一些常见的属性,Spring Boot文档也列出了大部分的属性以及其默认值,我就不再赘述了。这次我们聊点别的。

配置属性其实还有好多种方式,除了application.properties,还有十几种方式,但是有一些不常见,以下是一些常见的:

  • application.yml 以YAML格式来配置属性
  • application.properties
  • 操作系统环境变量
  • JVM属性(System.getProperties())
  • 命令行参数

这几种方式优先级从低到高。低优先级的配置会被高优先级的配置给覆盖掉。

application.ymlapplication.properties的作用是一样的,只不过格式不太一样,我更倾向于使用.properties文件,因为配置之后感觉更清晰,而且从StackOverflow上copy&paste的时候更方便🤣:

使用环境变量的时候,命名通常为大写,分隔符从.变成了下划线:

export SPRING_PROFILES_ACTIVE=dev

使用命令行参数的时候,属性通过命令行参数传入:

java -jar app.jar --spring.profiles.active=dev

从以上可以看出,Spring的配置还是很灵活的,你可以根据自己的应用场景来使用不同的方式。我最常用的就是application.properties和环境变量搭配使用。


Spring有profile的机制,一个profile就是一个字符串。Spring容器中的Bean可以通过@Profile注解声明自己是属于哪个profile的,从而根据运行时的profile设置决定需不需要创建这个Bean。比如我在开发的时候,通常使用两个profile,一个是dev,一个是prod,分别代表开发环境和生产环境。我可以针对不同的环境生成不同的Bean。

其实application.properties也可以针对不同的profile使用不同的配置。Spring Boot支持以application-{profile}.properties形式引入不同profile下的配置:

我在application.properties里将默认的profile设置为dev,那么项目默认的就是开发环境,使用的是application.propertiesapplication.dev.properties里的配置。在部署的时候我通常会将环境变量SPRING_PROFILES_ACTIVE设置为prod,这样部署的时候使用的就是生产环境的配置,即application.propertiesapplication.prod.properties里的配置。我习惯在dev和prod的配置文件中写上不同的数据库信息等,application.properties里放一些通用的配置。

发表评论

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