Spring Boot的特点就是自动配置,开箱即用。它按照业界一些常见的做法去配置项目,如果你代码跑起来之后,感觉够用了,就不用再操心。如果感觉不够用,就需要自己定义一些属性来满足你的需求。使用Spring Initializr或者IDE创建项目之后,在 src/main/resources
目录下会有个 application.properties
文件,它就是用来保存你的自定义配置的,每条配置使用”key=value”的形式,大概长这样:
相信你肯定用过了,网上各种教程基本开头都会教你配置一些常见的属性, Spring Boot文档 也列出了大部分的属性以及其默认值,我就不再赘述了。这次我们聊点别的。
配置属性其实还有好多种方式,除了 application.properties
,还有 十几种方式 ,但是有一些不常见,以下是一些常见的:
application.yml application.properties
这几种方式优先级从低到高。低优先级的配置会被高优先级的配置给覆盖掉。
application.yml
和 application.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.properties
和 application.dev.properties
里的配置。在部署的时候我通常会将环境变量SPRING_PROFILES_ACTIVE设置为prod,这样部署的时候使用的就是生产环境的配置,即 application.properties
和 application.prod.properties
里的配置。我习惯在dev和prod的配置文件中写上不同的数据库信息等, application.properties
里放一些通用的配置。