在任何开发框架中,多环境管理通常是重要的核心功能,在 Spring 框架中也不例外,这里称为我们的Spring Profiles设置文件的功能说起来很简单,但实现起来却是一个功能。小心乱掉掉的文章我很愿意来讨论一番,很容易把话题搞清楚才不会管得了。
建立实例应用程序
-
使用 Spring Boot CLI 快速创建专案(也可以使用Spring Initializr建立) <span style="color:#444444"><span style="background-color:#f6f6f6">spring init <span style="color:#888888">--dependencies=web --groupId=com.duotify sbprofile1</span></span></span> 使用 Visual Studio Code 开启该专案 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>代码</strong></span>sbprofile1</span></span> -
加入一个HomeController 技术 档名路径:src/main/java/com/duotify/sbprofile1/controllers/HomeController.java <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span> <span style="color:#333333"><strong>com </strong></span><span style="color:#880000">.duotify </span><span style="color:#880000">.sbprofile1 </span><span style="color:#880000">.controllers</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.GetMapping</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.RestController</span>;
@<span style="color:#333333"><strong>休息控制器</strong></span>
公共类 HomeController {
@GetMapping <span style="color:#333333"><strong>(</strong></span> "/")
公共字符串主页(){
<span style="color:#333333"><strong>返回</strong></span>“<span style="color:#333333"><strong>你好</strong></span> <span style="color:#333333"><strong>世界</strong></span>”;
}
}</span></span> -
测试执行 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span></span></span> 补充说明:你可以在pom.xml 的<build> 底下添加一个设置<defaultGoal>spring-boot:run</defaultGoal> ,未来只要打就可以mvn 自动启动 Spring Boot 执行喔!:+1: 使用 cURL 测试 <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#bc6060">本地主机:</span><span style="color:#880000">8080</span>
Hello World</span></span>
理解设定档(Profiles)的真正含意
春天的框架有一大堆抽象的概念,不好好花时间研究,会有很多恶魔般的细节无法理解。本文所提到的春天简介原本是一个很简单的概念,但是在写春天靴子的时候却是那样的有很多变化,可以让你脑袋打结什么。
我们先从最简单、最抽象的概念开始讲起。
配置文件(配置文件)常用这个名字( Profile?Name),名字代表应用程序配置。你可以通过一个简单的设置名称(Profile Name),快速的切换应用程序配置,就这么简单!
其中应用程序配置包含了两层含意:
-
未配置(Configuration) 那个配置其实就是像这样的src/main/resources/application.properties 属性定义档。 -
应用程序组件组合(组件组合) 应用程序组件组件组合使用的程序里面有哪些「」要启用,你就可以在应用程序执行期间通过本次启动的参数,简单地决定使用什么配置文件来执行应用程序启动。
使用Profile来管里应用配置,最常见的例子,就是用在「多环境」部署上,比如你有公司内部的「测试环境」与客户提供的「正式环境」,通常有哪些设定都一样,但也有一样的地方。此时我们就可以通过多个Profile中的这些差异,分别来管理之后,我们只要知道设置名称(Profile Name)就可以切换不同的环境。
如何使用应用程序属性(Application Properties)
在了解如何管里多个设置文件之前,应该先了解应用程序属性(Application Properties)应该怎么用。
的体验步骤如下:
-
编辑src/main/resources/application.properties 属性档 加入一个my.profile 属性值 <span style="color:#444444"><span style="background-color:#f6f6f6">我的。<span style="color:#333333"><strong>个人资料</strong></span>=dev</span></span> -
调整HomeController ,添加一个私有字段(Private Field),并@Value 通过添加来一个my.profile 属性值 档名路径:src/main/java/com/duotify/sbprofile1/controllers/HomeController.java <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span> <span style="color:#333333"><strong>com </strong></span><span style="color:#880000">.duotify </span><span style="color:#880000">.sbprofile1 </span><span style="color:#880000">.controllers</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.beans </span><span style="color:#880000">.factory </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Value</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.GetMapping</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.RestController</span>;
@<span style="color:#333333"><strong>休息控制器</strong></span>
公共类 HomeController {
@Value <span style="color:#333333"><strong>(</strong></span> "${ <span style="color:#333333"><strong>my </strong></span><span style="color:#880000">.profile</span> }")
<span style="color:#333333"><strong>private </strong></span><span style="color:#333333"><strong>String </strong></span><span style="color:#333333"><strong>myProfile</strong></span> ;
@GetMapping <span style="color:#333333"><strong>(</strong></span> "/")
公共字符串主页(){
<span style="color:#333333"><strong>返回</strong></span>“<span style="color:#333333"><strong>你好</strong></span> <span style="color:#333333"><strong>世界</strong></span>:”+<span style="color:#333333"><strong>这个</strong></span><span style="color:#880000">.myProfile</span>;
}
}</span></span> -
测试执行 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span></span></span> 使用 cURL 测试 <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span>开发</span></span>
环境参数、环境变量如何变化、环境变量如何变化
当通过穿透属性的时候,加入属性,此时 Maven 需要一个pom.xml 定义方法,我们希望将某个属性的值写入到“src/main/resources/application.properties 属性文件中”。
的体验步骤如下:
-
编辑src/main/resources/application.properties 属性档 加入一个my.profile 属性值 <span style="color:#444444"><span style="background-color:#f6f6f6">我的.profile= <span style="color:#1f7199">@我的</span>。<span style="color:#bc6060">轮廓@</span></span></span> -
调整pom.xml 档,在<properties> 加入一个<my.profile> 属性 <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>my.profile</strong></span> > dev2 </ <span style="color:#333333"><strong>my.profile</strong></span> ></span></span> -
测试执行 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span></span></span> 使用 cURL 测试 <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev2</span></span>
我们在特殊情况下,他会定义一个特殊的属性值,在特殊情况下,他会定义一个特殊的属性值,如果在编译时,Maven 会在编译时加入application.properties 默认值,那是可以让你在执行期间才通过方法优点(赋值)。@my.profile@
-
直接从命令列参数参数 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring- boot <span style="color:#bc6060">t:run</span> -Dmy. <span style="color:#333333"><strong>配置文件</strong></span>=dev3</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev3</span></span> -
直接值从环境变化数字属性 下面是 Bash 设定环境变数的语法: <span style="color:#444444"><span style="background-color:#f6f6f6">my_profile =dev4 mvn clean spring-boot:run</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev4</span></span> 环境变数发生属性名称有小数点(. )的时候,记得转成底线(_ )才可以。 -
先有档次,通过调用参数java -jar 时也可以使用 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn 清洁<span style="color:#397300">包</span></span></span> <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>java</strong></span> -Dmy.profile=dev5 -jar 目标/ <span style="color:#880000">sbprofile1-0</span>。<span style="color:#880000">0</span> . <span style="color:#880000">1</span> -SNAPSHOT.jar</span></span> 这个-Dmy.profile=dev5 参数会使用JVM当系统参数。 <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev5</span></span> 请记住-Dmy.profile=dev5 一定要设置在-jar 前面! -
先决条件,通过环境变量java -jar 时也可以通过 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn 清洁<span style="color:#397300">包</span></span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">my_profile =dev6 java -jar 目标/sbprofile1- <span style="color:#880000">0.0</span>。<span style="color:#880000">1</span> -SNAPSHOT.jar</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev6</span></span> 请记住-Dmy.profile=dev5 一定要设置在-jar 前面! -
直接从.env 定义的环境变量 先在专案根目录加入一个.env 档,内容如下: <span style="color:#444444"><span style="background-color:#f6f6f6">我的个人资料 = dev7</span></span> 建立一个启动设置档( VSCode?.vscode/launch.json ) <span style="color:#444444"><span style="background-color:#f6f6f6">{
“版本”:<span style="color:#880000">“0.2.0”</span>,
“配置”:[
{
“type”:<span style="color:#880000">“java”</span>,
“name”:<span style="color:#880000">“Launch DemoApplication”</span>,
“request”:<span style="color:#880000">“launch”</span>,
“mainClass”:<span style="color:#880000">“com.duotify.sbprofile1.DemoApplication”</span>,
“projectName”:<span style="color:#880000">“sbprofile1”</span>,
“envFile” : <span style="color:#880000">"${workspaceFolder}/.env"</span>
}
]
}</span></span> 这里的重点envFile 设定。 点击F5 启动专案,就可以读取到设定值了! <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev7</span></span>
理解 Spring Profiles 设置文件的使用方式
在了解了 Properties 文件的使用与设置文件之后,终于可以进入到这里的重点内容,那是如何定义 Spring Profiles 文件的。
下面是体验步骤:
-
编辑src/main/resources/application.properties 属性档 加入一个spring.profiles.active 属性值 <span style="color:#444444"><span style="background-color:#f6f6f6">spring.profiles.active=@spring <span style="color:#1f7199">.profiles</span>。<span style="color:#bc6060">积极的@</span></span></span> 这里将spring.profiles.active 使用框架会使用的属性是 Spring 的一个名称,而正确的一个名称@spring.profiles.active@ 可以来自外部的属性。 -
pom.xml 调整的设定档,加入Maven的<profiles> 设定 <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>profiles</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> >默认</ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>activation</strong></span> >
< <span style="color:#333333"><strong>activeByDefault</strong></span> > true </ <span style="color:#333333"><strong>activeByDefault</strong></span> >
</ <span style="color:#333333"><strong>activation</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > default < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</<span style="color:#333333"><strong>属性</strong></span>>
</ <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> >开发8 </<span style="color:#333333"><strong>id</strong></span> >
<<span style="color:#333333"><strong>属性</strong></span>>
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > dev8 < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
</ <span style="color:#333333"><strong>profiles</strong></span> ></span></span> 属性比较不同的地方可以定义一个文件的属性,我们定义一个我们不同2 的配置文件。?,这个属性是用来给 Spring 应用程序参考当前启用的设置文件是谁。default dev8 spring.profiles.active 请记住:你在pom.xml 定义的属性(<properties> )并且不会直接给 Java 程序参考,它们之间的关系是: <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#880000">Java文件原始文件属性/应用程序</span><span style="color:#880000">文件</span>属性/ml) <-- 属性属性外部属性。</span></span> -
修改HomeController 的@Value 标注,改注spring.profiles.active 属性 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span> <span style="color:#333333"><strong>com </strong></span><span style="color:#880000">.duotify </span><span style="color:#880000">.sbprofile1 </span><span style="color:#880000">.controllers</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.beans </span><span style="color:#880000">.factory </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Value</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.GetMapping</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.web </span><span style="color:#880000">.bind </span><span style="color:#880000">.annotation </span><span style="color:#880000">.RestController</span>;
@<span style="color:#333333"><strong>休息控制器</strong></span>
公共类 HomeController {
@Value ( "${ <span style="color:#333333"><strong>spring </strong></span><span style="color:#880000">.profiles </span><span style="color:#333333"><strong>.active</strong></span> }")
<span style="color:#333333"><strong>private </strong></span><span style="color:#333333"><strong>String </strong></span><span style="color:#880000">myProfile </span><span style="color:#333333"><strong>;</strong></span>
@GetMapping <span style="color:#333333"><strong>(</strong></span> "/")
公共字符串主页(){
<span style="color:#333333"><strong>返回</strong></span>“<span style="color:#333333"><strong>你好</strong></span> <span style="color:#333333"><strong>世界</strong></span>:”+<span style="color:#333333"><strong>这个</strong></span><span style="color:#880000">.myProfile</span>;
}
}</span></span> -
测试执行 请记住我们现在有两个设置档,分别是default 和这两个设置档dev8 。当我们用mvn spring-boot:run 启动应用程序的时候,就可以用-P 外加一个ProfileName 就可以启用设置档了。 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pdev8</span></span> 注意:这里的-P 必须P 接上一个元素的大值写,而且后面的名称是pom.xml 表格<id> ! 使用 cURL 测试 <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> dev8</span></span> 尝试设定一个名称:不存在的?dev9 设定档是你自己的预设 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pdev9</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl <span style="color:#880000">localhost:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> <span style="color:#333333"><strong>默认</strong></span></span></span>
注意:是可以的,-P 可以用两个图标来启用。例如,您可以启用以下命令来测试mvn help:active-profiles -Pdev,prod
通过 Spring Profiles 切换不同的应用程序属性文件
使用 Spring 框架的 Profiles 功能,还有另外一个好处,那是你可以不用把属性设置在 Maven 的pom.xml 文件里面,可以通过自定义的习惯,将应用程序设置在不同的文件.properties 中。以下文件名称规格请见注解说明:
<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#888888"># 这是预设的这个应用程序属性档,无论启用哪个设置,载入档案中的属性</span>
应用程序属性
<span style="color:#888888">#这是特定设置文件会套用的应用程序文件,只有启用的属性文件会载入文件中的属性</span>
application-{ProfileName}.properties</span></span>
请注意:在application 文件名后面要接上- (破折号)符号,然后接上你的ProfileName 正确的命名规则。
就来一下多设置文件我们的套用体验情况:
-
我们再加入一个dev9 设定档到pom.xml 档中 <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>profiles</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> >默认</ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>activation</strong></span> >
< <span style="color:#333333"><strong>activeByDefault</strong></span> > true </ <span style="color:#333333"><strong>activeByDefault</strong></span> >
</ <span style="color:#333333"><strong>activation</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > default < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</<span style="color:#333333"><strong>属性</strong></span>>
</ <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> >开发8 </<span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > dev8 < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> > dev9 </ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > dev9 < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
</ <span style="color:#333333"><strong>profiles</strong></span> ></span></span> -
除了application.properties ,我们另外建立两个应用程序属性文件 档案1:(src/main/resources/application.properties 加入一个my.name 属性) <span style="color:#444444"><span style="background-color:#f6f6f6">我的.profile= <span style="color:#1f7199">@我的</span>。<span style="color:#bc6060">profile@</span>
spring.profiles.active= @ <span style="color:#1f7199">spring.profiles</span>。<span style="color:#bc6060">active@my.name=Will</span>
_</span></span> 档案2:(src/main/resources/application-dev8.properties 加入一个my.name 属性) <span style="color:#444444"><span style="background-color:#f6f6f6">我的。<span style="color:#333333"><strong>名字</strong></span>=约翰</span></span> 档案3:(src/main/resources/application-dev9.properties 空白内容) -
修改HomeController 的@Value 标注,改注spring.profiles.active 属性 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span>com.duotify.sbprofile1.controllers;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.beans.factory。<span style="color:#333333"><strong>注释</strong></span>.Value;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.web.bind。<span style="color:#333333"><strong>注释</strong></span>.GetMapping;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.web.bind。<span style="color:#333333"><strong>注释</strong></span>.RestController;
<span style="color:#1f7199">@RestController</span>
<span style="color:#333333"><strong>公共</strong></span> <span style="color:#333333"><strong>类</strong></span> <span style="color:#880000"><strong>HomeController</strong></span> {
<span style="color:#1f7199">@Value( <span style="color:#4d99bf">" <span style="color:#444444">${spring.profiles.active}</span> "</span> )</span>
<span style="color:#333333"><strong>私有</strong></span>字符串 myProfile;
<span style="color:#1f7199">@Value( <span style="color:#4d99bf">" <span style="color:#444444">${my.name}</span> "</span> )</span>
<span style="color:#333333"><strong>私有</strong></span>字符串 myName;
<span style="color:#1f7199">@GetMapping( <span style="color:#4d99bf">"/"</span> ) </span>
<span style="color:#333333"><strong>public</strong></span> String home() {
<span style="color:#333333"><strong>return </strong></span> <span style="color:#880000">"Hello World:"</span> + <span style="color:#333333"><strong>this</strong></span> .myName;
}
}</span></span> -
测试执行 请记住我们现在的三个3 设定档,分别是default ,dev8 与dev9 这。 先尝试不指定个人资料的情况 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span></span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl <span style="color:#880000">localhost: </span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span>将</span></span> 重新尝试指定个人资料dev8 的情况 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pdev8</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl <span style="color:#880000">localhost:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span>约翰</span></span> 最后尝试指定个人资料dev9 的情况 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pdev9</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl <span style="color:#880000">localhost: </span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span>将</span></span>
透过 Spring Profiles 载入不同的相依套件
通过例如 Spring Profile 的不同设置方式进行设置,除了可以设置“属性”之外,重新设置(Profile)来加载的相依套件<dependencies> ,与不同的版本(测试新旧版本)相同版本),不同的介面资料面但不同(不同模式库驱动)之类的,这点不同的套件很赞!:+1:
-
下面是不同版本的不同设置示例: <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> > dev8 </ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>dependencies</strong></span> >
< <span style="color:#333333"><strong>dependency</strong></span> >
< <span style="color:#333333"><strong>groupId</strong></span> > org.springframework.boot </ <span style="color:#333333"><strong>groupId</strong></span> >
< <span style="color:#333333"><strong>artifactId</strong></span> > spring-boot-starter-web </ <span style="color:#333333"><strong>artifactId</strong></span> >
< <span style="color:#333333"><strong>version</strong></span> > 2.7.0 < /<span style="color:#333333"><strong>版本</strong></span>>
</<span style="color:#333333"><strong>依赖</strong></span>>
</<span style="color:#333333"><strong>依赖</strong></span>>
<<span style="color:#333333"><strong>属性</strong></span>>
< <span style="color:#333333"><strong>spring.profile.active</strong></span>> dev8 < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</<span style="color:#333333"><strong>属性</strong></span>>
</ <span style="color:#333333"><strong>profile</strong></span> ></span></span> 如果想看套用不同的 Profile 之后的相依套件,可以执行以下命令: <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>mvn</strong></span>依赖:tree -Pdev8</span></span> -
下面是不同介面不同套件的设定示例: <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>profiles</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> >本地</ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>dependencies</strong></span> >
< <span style="color:#333333"><strong>dependency</strong></span> >
< <span style="color:#333333"><strong>groupId</strong></span> > org.hsqldb </ <span style="color:#333333"><strong>groupId</strong></span> >
< <span style="color:#333333"><strong>artifactId</strong></span> > hsqldb </ <span style="color:#333333"><strong>artifactId</strong></span> >
< <span style="color:#333333"><strong>version</strong></span> > 2.3.3 </ <span style="color:#333333"><strong>version</strong></span> >
< <span style="color:#333333"><strong>classifier</strong></span> > jdk5 </<span style="color:#333333"><strong>分类器</strong></span>>
</<span style="color:#333333"><strong>依赖</strong></span>>
</<span style="color:#333333"><strong>依赖</strong></span>项>
<<span style="color:#333333"><strong>属性</strong></span>>
< <span style="color:#333333"><strong>jdbc.url</strong></span> > jdbc:hsqldb:file:databaseName < <span style="color:#333333"><strong>/jdbc.url</strong></span> >
< <span style="color:#333333"><strong>jdbc.username</strong></span> > a < <span style="color:#333333"><strong>/jdbc.username</strong></span> >
< <span style="color:#333333"><strong>jdbc.password</strong></span> > </ <span style="color:#333333"><strong>jdbc.password</strong></span> >
< <span style="color:#333333"><strong>jdbc.driver</strong></span> > org.hsqldb.jdbcDriver </ <span style="color:#333333"><strong>jdbc.driver</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> > MySQL </<span style="color:#333333"><strong>身份证</strong></span>>
< <span style="color:#333333"><strong>dependencies</strong></span> >
< <span style="color:#333333"><strong>dependency</strong></span> >
< <span style="color:#333333"><strong>groupId</strong></span> > mysql </ <span style="color:#333333"><strong>groupId</strong></span> >
< <span style="color:#333333"><strong>artifactId</strong></span> > mysql-connector-java </ <span style="color:#333333"><strong>artifactId</strong></span> >
< <span style="color:#333333"><strong>version</strong></span> > 5.1.38 </ <span style="color:#333333"><strong>version</strong></span> >
</ <span style="color:#333333"><strong>dependency</strong></span> >
</ <span style="color:#333333"><strong>dependencies</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>jdbc. url</strong></span> > jdbc:mysql://mysql.website.ac.uk:3306 </ <span style="color:#333333"><strong>jdbc.url</strong></span> >
< <span style="color:#333333"><strong>jdbc.username</strong></span> >用户< <span style="color:#333333"><strong>/jdbc.username</strong></span> >
< <span style="color:#333333"><strong>jdbc.password</strong></span> > 1234 < <span style="color:#333333"><strong>/jdbc.password</strong></span> >
< <span style="color:#333333"><strong>jdbc.driver</strong></span> > com.mysql.jdbc.Driver < <span style="color:#333333"><strong>/jdbc.driver</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
</ <span style="color:#333333"><strong>profiles</strong></span> ></span></span>
透过 Spring Profiles 载入不同 Beans
在春天的框架下,所有用@Component 标注的这些类别全部都被注册成豆类元素,其中当然也包含@Configuration 标注的类别,因为标注都继承自@Component 介面。
然而,你只要在上面额外@Profile 套上类别的标签,就可以很简单地宣布春天要在特定的个人资料下载入,以下是使用示例:
-
建立一个UserService 类别 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span>com.duotify.sbprofile1.services;
<span style="color:#333333"><strong>公共</strong></span> <span style="color:#333333"><strong>类</strong></span> <span style="color:#880000"><strong>UserService</strong></span> {
<span style="color:#333333"><strong>public</strong></span> UserService(String name) {
<span style="color:#333333"><strong>this</strong></span> .name = name;
}
<span style="color:#333333"><strong>私有</strong></span>字符串名称;
<span style="color:#333333"><strong>public</strong></span> String getName() {
<span style="color:#333333"><strong>返回</strong></span>名称;
}
}</span></span> -
建立一个UserServiceDev 类别 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span> <span style="color:#333333"><strong>com </strong></span><span style="color:#880000">.duotify </span><span style="color:#880000">.sbprofile1 </span><span style="color:#880000">.services</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.context </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Bean</span>;
<span style="color:#333333"><strong>导入</strong></span><span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.context </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Profile</span>;
<span style="color:#333333"><strong>导入</strong></span><span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.stereotype </span><span style="color:#880000">.Component</span>;
@<span style="color:#333333"><strong>组件</strong></span>
@Profile( <span style="color:#880000">"dev"</span> )
公共类 UserServiceDev {
@<span style="color:#333333"><strong>豆</strong></span>
公共用户服务 getUserService() {
<span style="color:#333333"><strong>返回</strong></span> <span style="color:#333333"><strong>新的</strong></span> <span style="color:#333333"><strong>用户服务</strong></span>(“<span style="color:#333333"><strong>开发</strong></span>”);
}
}</span></span> 这个UserServiceDev 只有在dev 启用设置档时才会被Spring执行。 -
建立一个UserServiceProd 类别 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span> <span style="color:#333333"><strong>com </strong></span><span style="color:#880000">.duotify </span><span style="color:#880000">.sbprofile1 </span><span style="color:#880000">.services</span>;
<span style="color:#333333"><strong>导入</strong></span> <span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.context </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Bean</span>;
<span style="color:#333333"><strong>导入</strong></span><span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.context </span><span style="color:#880000">.annotation </span><span style="color:#880000">.Profile</span>;
<span style="color:#333333"><strong>导入</strong></span><span style="color:#333333"><strong>org </strong></span><span style="color:#880000">.springframework </span><span style="color:#880000">.stereotype </span><span style="color:#880000">.Component</span>;
@<span style="color:#333333"><strong>组件</strong></span>
@Profile( <span style="color:#880000">"!dev"</span> )
公共类 UserServiceProd {
@<span style="color:#333333"><strong>豆</strong></span>
公共用户服务 getUserService() {
<span style="color:#333333"><strong>返回</strong></span> <span style="color:#333333"><strong>新的</strong></span> <span style="color:#333333"><strong>用户服务</strong></span>(“<span style="color:#333333"><strong>产品</strong></span>”);
}
}</span></span> 这个只有在启用UserServiceDev 非dev 设置档时才会被 Spring 执行。 -
修改HomeController 并通过「式」注入UserService 服务 <span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>包</strong></span>com.duotify.sbprofile1.controllers;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.beans.factory。<span style="color:#333333"><strong>注释</strong></span>.Value;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.web.bind。<span style="color:#333333"><strong>注释</strong></span>.GetMapping;
<span style="color:#333333"><strong>导入</strong></span>org.springframework.web.bind。<span style="color:#333333"><strong>注释</strong></span>.RestController;
<span style="color:#333333"><strong>导入</strong></span>com.duotify.sbprofile1.services.UserService;
<span style="color:#1f7199">@RestController</span>
<span style="color:#333333"><strong>公共</strong></span> <span style="color:#333333"><strong>类</strong></span> <span style="color:#880000"><strong>HomeController</strong></span> {
<span style="color:#1f7199">@Value( <span style="color:#4d99bf">" <span style="color:#444444">${spring.profiles.active}</span> "</span> )</span>
<span style="color:#333333"><strong>私有</strong></span>字符串 myProfile;
<span style="color:#1f7199">@Value( <span style="color:#4d99bf">" <span style="color:#444444">${my.name}</span> "</span> )</span>
<span style="color:#333333"><strong>私有</strong></span>字符串 myName;
<span style="color:#333333"><strong>私人</strong></span>用户服务 svc;
<span style="color:#333333"><strong>公共</strong></span>HomeController(UserService svc) {
<span style="color:#333333"><strong>这个</strong></span>.svc = svc;
}
<span style="color:#1f7199">@GetMapping( <span style="color:#4d99bf">"/"</span> ) </span>
<span style="color:#333333"><strong>public</strong></span> String home() {
<span style="color:#333333"><strong>return </strong></span> <span style="color:#880000">"Hello World:"</span> + <span style="color:#333333"><strong>this</strong></span> .svc.getName();
}
}</span></span> -
修改pom.xml 再加入两个<profile> 定义 <span style="color:#444444"><span style="background-color:#f6f6f6">< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> > dev </ <span style="color:#333333"><strong>id</strong></span> >
< <span style="color:#333333"><strong>properties</strong></span> >
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > dev < <span style="color:#333333"><strong>/spring.profiles.active</strong></span> >
</ <span style="color:#333333"><strong>properties</strong></span> >
</ <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>profile</strong></span> >
< <span style="color:#333333"><strong>id</strong></span> > prod </ <span style="color:#333333"><strong>id</strong></span> >
<<span style="color:#333333"><strong>属性</strong></span>>
< <span style="color:#333333"><strong>spring.profiles.active</strong></span> > prod </ <span style="color:#333333"><strong>spring.profiles.active</strong></span> >
</<span style="color:#333333"><strong>属性</strong></span>>
</<span style="color:#333333"><strong>简介</strong></span>></span></span> -
测试执行 请记住我们现在的身份设置文件5 ,分别是default ,?dev8 ,?dev9 ,dev 与prod 这五个。 尝试指定个人资料dev 的情况 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pdev</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl<span style="color:#880000">本地主机:</span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span>开发</span></span> 尝试指定个人资料prod 的情况 <span style="color:#444444"><span style="background-color:#f6f6f6">mvn clean spring-boot:<span style="color:#333333"><strong>运行</strong></span>-Pprod</span></span> <span style="color:#444444"><span style="background-color:#f6f6f6">$ curl <span style="color:#880000">localhost: </span><span style="color:#880000">8080</span>
Hello <span style="color:#880000">World:</span> Prod</span></span> ?
|