Spring Boot 应用部署通常会面临多个部署环境,如测试环境、线上环境、演示环境等
以 jar文件运行
SpringBoot默认以jar包方式运行, 可以在 Maven配置如下插件,将 SpringBoot导出成可执行 的 jar 文件
1 | <!-- Package as an executable jar --> |
在工程目录下的运行命令行中运行 mvn package
jar方式运行:
1 | java -jar target/target/xxx.x-0.0.1-SNAPSHOT.jar |
以war万式部署
将 SpringBoot应用打成一个 war包,部署到 Tomcat 、Jetty服务器,或者商业的 Weblogic、 Websphere 上
多环境部署
测试环境、准线上环境 、 演示环境等
环境对应了不同的配置要求,通常有:
- 数据库的访问地址不同,数据库用户名和密码也不同,连接池的配置也大不一样,开发环境可能只配置5个连接,而线上环境则多达数百个。
- 日志配置不同,开发和测试环境的日志级别可能是 debug 级别, 日志信息也常常包含 代码所在行,而线上环境 则 通常是 INFO 级别 ,且为了性能考虑不会输出日志所在行。另外,对日志文件要求也不尽相同, 线上环境要求日志文件能定时打包压缩, 开发环 境则往往不会配置日志文件。
- 访问的第三方系统不一样,复杂的应用通常要访问第三方系统,如系统内的 Redis 缓存,通过 REST访问其他 SpringBoot应用,这都需要配置不同的 IP地址。
- 不同的环境有不同的开关属性,比如开发系统,需要关闭短信、微信的通知功能 ,而演示环境、线上环境则需要打开这些配置
application-{profile}.properties
的配置文件, 其中profile
可以是任意名字,比如:
test
, 表示测试环境prod
,表示线上环境pre-prod
, 预发布环境demo1.0
1.0版本演示环境
在环境变量中,spring.profiles.active 指定使用哪个 profile 比如:
1 | java -jar -Dspring.profiles.active=prod target/xxx-0.0.1-SNAPSHOT.jar |
@Profile注解
- @Profile 注解以决定配置类是否生效
- @Profile 注解可以支持使用多种 profile,也可以使用“!”来排除特定 profile
- @Profile({“test”, “prod”}),测试环境和线上环境生效
- @Profile({“test”, “!prod”}),测试环境和非线上环境生效