[版权声明]非商业目的注明出处可以自由转载
资料来源: shusheng007
这篇文章的目录概述了如何使用配置文件代码设置配置文件、如何使用启动参数APP、如何使用配置文件使用maven配置文件以及如何获取有效配置文件
概要
当你刚接触SpringBoot的时候,是否有点不熟悉它提供的Profile,摸索之后才恍然大悟。 今天我要做一点关于Profile的总结,作为互联网的记忆保留。
什么是配置文件? Profile翻译成中文就是个人资料、文件…。 例如,王二狗和yydxmt两个人都有自己的个人资料
xydj的配置文件:
姓名: yydxmt性别:女人爱好:购物王二狗Profile:
姓名:王二狗性别:男趣:编程,看gddfbx对应Spring也一样。 在实际开发中,dev、uat、prod等多个环境同时存在。 这些环境共享一个代码逻辑,但需要不同的配置。 例如,dev环境必须连接到测试数据库,而prod必须连接到生产数据库。
如前所述,profile的主要目的是区分不同的环境,并允许配置更多不同的环境。 那么怎么使用呢,在SpringBoot中有两种用法。
配置文件SpringBoot应用application.properties/application.YAML配置文件的命名规则,并根据当前活动的配置文件加载相应的配置文件。
application-{您的配置文件}.properties/application-{您的配置文件}.YAML下有当前的demo项目结构,资源文件夹下有三个配置文件
((src((main () ) ) (Java () ) (resources ((application-dev.ya application
server :端口:8081 application-prod.YAML
server : port :8082 application.YAML
#如果空白profile为default,则只使用application.yaml,SpringBoot的默认服务器端口为8080。 如果将当前profile作为dev激活,SpringBoot将额外加载application-dev.yaml并合并到application.yaml中,以复盖相同的配置(如果存在)。
以下是未激活profile时项目启动时的输出,其中profile为default,server port为8080
2021-09-222233605336031.505 info 78078---[ restarted main ] t.s.springprofilesapplication : noactiveprofilesession fallingbacktodefaultprofiles : default . 2021-09-2222222336050 main ] o.s.b.w.embedded.Tomcat.Tomcat web server : tomcatinitializedwithport (s ) :8080 ) http )代码配置用于配置文件
假设你有一个接口
publicinterfacespeaker { string speak (; }虽然需要在不同的环境中使用不同的bean,但在dev环境中使用的bean如下所示
@service@profile(value={'dev ',' default ' } publicclassdevspeakerimplementsspeaker { @ overridepublicstringspeak } )
@service@profile(prod ) ) publicclassprodspeakerimplementsspeaker (@ overridepublicstringspeak ) ) return ) Iamprodspeaker
在使用的地方直接注入接口的实例即可
@ restcontrollerpublicclassspeakercontroller { privatefinalspeakersp }
eaker; public SpeakerController(Speaker speaker) { this.speaker = speaker; } @RequestMapping(method = RequestMethod.GET,path = "/speak") public String speaking(){ return speaker.speak(); }} 如何激活上面讲的都是如何使用,但是我们如何将我们当前的profile切换到dev/prod等profile呢?SpringBoot支持非常多种方式,我们简单介绍几种简单而常用的方式。
使用启动参数我们可以在SpringBoot项目启动时传入参数,这种参数分3种,这里使用任意一种就可以。
如果我们使用Intellij IDEA的话,可以点击Edit Configuration,然后打开Configurations配置框,在下面蓝色框中,任意选择一个填入即可。
可以将profile配置到项目的application 文件中
spring: profiles: active: dev 使用maven的profilemaven本身也支持profile,用来控制编译打包等流程。SpringBoot的application文件可以读取pom.xml中定义的profile,从而激活相应的profile。
在pom.xml 文件中添加profiles <project ...> ... <profiles> <profile> <id>dev</id> <properties> <evn>dev</evn> </properties> </profile> <profile> <id>prod</id> <properties> <evn>prod</evn> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> </profiles> ... </project>我们建立了dev和prod两个profile,然后将prod作为默认执行的profile。添加完后刷新maven,可以看到IDE右上角maven的窗口出现了一个Profiles的条目。我们可以勾选激活哪一个profile,记得reload。
在application.yaml中读取 spring: profiles: active: @evn@注意@evn@,其中evn是我们在pom.xml 中的profiles定义的<evn>你的profile</evn>,而前后两个@是SpringBoot 读取maven的profile的语法。
正常情况下经过以上两步就OK了,我测试的时候也只需要上面两步就成功了,但是有人反映需要添加如下配置。
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ...</build> 如何获取激活的Profiles有两种方法获取当前激活的profile,通过Environment 或者@Value
@RestControllerpublic class SpeakerController { @Value("${spring.profiles.active:}") private String activeProfile; private final Environment environment; public SpeakerController(Environment environment) { this.environment = environment; } @GetMapping("/profiles") public String getCurrentProfiles(){ return String.format("通过Environment获取:%s | 通过@Value获取:%s", Arrays.toString(environment.getActiveProfiles()), activeProfile); }} 总结暂时就说这么多吧,有什么问题留言,没有问题就点赞,睡觉去咯。。。
文章首发及源码地址