1.环境准备
正常来讲,一个软件的开发上线的流程大部分都是分为三个环境,依次是开发、测试、上线。我们外包公司是开发(local)、内部测试(dev)、测试中心测试(sit)、业务版本测试(uat)、生产部署(prod)。
- 开发环境(dev):开发环境是指的是咱们本地跑的环境。
- 测试环境(qa):一般是克隆一份生产环境的配置,qa即test。
- 生产环境(prod):正式提供对外服务的,即是真实环境。
今天主要讲讲关于springboot如何通过多个yaml文件实现环境部署时自动切换配置的两种方式,部署时切换方式和打包时Maven控制方式。
如上图:在application.yml文件的同级目录依次创建application-dev.yml,application-qa.yml,这2个配置文件,dev、qa分别对应上文"环境介绍"中的2个环境。而application-commons.yml是测试激活多个配置公用文件(不变的配置信息)。
配置文件中包含的信息很简单:
- application-dev.yml
user_name: wukong-dev
- application-qa.yml
user_name: bajie-qa
- application-commons.yml
login_id: SpringBoot
2.Maven控制打包切换
2.1 设置项目对象模型pom.xml
2.1.1 添加profiles到pom.xml中,profiles节点是和build同级的
<profiles>
<profile>
<id>dev</id>
<properties>
<env>dev</env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>qa</id>
<properties>
<env>qa</env>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<env>prod</env>
</properties>
</profile>
</profiles>
activation 表示的是可以用这样的命令来触发profile,true 表示dev是默认的profile, 这样本地直接ide启动项目的时候就是连接的dev环境。
2.1.2 添加filters节点
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- 增加节点,注意env是上面配置的env标签 -->
<filters>
<filter>src/main/resources/application-${env}.yml</filter>
</filters>
</build>
2.2 设置激活配置文件
application.yml代码如下:
spring:
profiles:
active: @env@,commons
注意:@env@中的env可以理解为一个变量,需要与2.1.2中设置的${env}对应上。
2.3 添加Maven打包命令
clean package -P qa -D maven.test.skip=true
关于指令不熟悉的请看附录信息
2.4 执行Maven指令
注意:如果我运行的APP.java的程序,使用的DEV环境,但是打包的时候我使用的qa的打包,打包成功之后,激活的配置文件应该是qa的,Maven打包时已经设置了qa环境,部署命令中不需要再指明qa环境,如图激活成功
2.5 WEB环境测试
clean一下target之后,运行APP.java的主程序(显示的是DEV的默认环境数据)
package com.hanpang.web;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author: 胖先森
* === 面朝大海,春暖花开 ===
* 2023-06-12 9:47
**/
@RestController
public class IndexController {
@Value("${user_name}")
private String user_name;
@Value("${login_id}")
private String login_id;
@Autowired
private Environment environment;
@GetMapping("/index")
public void index(){
System.out.println(user_name);
System.out.println(login_id);
System.out.println(environment.getProperty("user_name"));
System.out.println(environment.getProperty("login_id"));
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public String getLogin_id() {
return login_id;
}
public void setLogin_id(String login_id) {
this.login_id = login_id;
}
}
http://127.0.0.1:8080/index 访问,后端获取信息如下
附录
maven 命令的格式为 mvn [plugin-name]:[goal-name],可以接受的参数如下。
-D 指定参数,如 -D maven.test.skip=true 跳过单元测试;
-P 指定 Profile 配置,可以用于区分环境;
-e 显示maven运行出错的信息;
-o 离线执行命令,即不去远程仓库更新包;
-X 显示maven允许的debug信息;
-U 强制去远程更新snapshot的插件或依赖,默认每天只更新一次。
创建maven项目:mvn archetype:create
指定 group: -D groupId=packageName
指定 artifact:-D artifactId=projectName
创建web项目:-D archetypeArtifactId=maven-archetype-webapp
验证项目是否正确:mvn validatemaven
打包:mvn package
只打jar包:mvn jar:jar
生成源码jar包:mvn source:jar
产生应用需要的任何额外的源代码:mvn generate-sources
编译源代码: mvn compile
编译测试代码:mvn test-compile
运行测试:mvn test
运行检查:mvn verify
清理maven项目:mvn clean
生成eclipse项目:mvn eclipse:eclipse
清理eclipse配置:mvn eclipse:clean
生成idea项目:mvn idea:idea
安装项目到本地仓库:mvn install
发布项目到远程仓库:mvn:deploy
在集成测试可以运行的环境中处理和发布包:mvn integration-test
显示maven依赖树:mvn dependency:tree
显示maven依赖列表:mvn dependency:list
下载依赖包的源码:mvn dependency:sources
安装本地jar到本地仓库:mvn install:install-file -DgroupId=packageName -DartifactId=projectName -Dversion=version -Dpackaging=jar -Dfile=path
启动tomcat:mvn tomcat:run
启动jetty:mvn jetty:run
运行打包部署:mvn tomcat:deploy
撤销部署:mvn tomcat:undeploy
启动web应用:mvn tomcat:start
停止web应用:mvn tomcat:stop
重新部署:mvn tomcat:redeploy
部署展开的war文件:mvn war:exploded tomcat:exploded