转载

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

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

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

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

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

application.yml
application.properties

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

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

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

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

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下的配置:

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

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

原文  https://fookwood.com/spring-boot-tutorial-16-properties
正文到此结束
Loading...