8.1 以jar文件运行
Spring Boot 默认以 jar 包方式运行 , 可以在 Maven 配置如下插件,将 Spring Boot 导出 成可执行的 jar 文件。
在工程目录下的运行命令行中运行 mvn package:
>mvn package
package 会将 Maven 工程打包成一个可执行的 jar 文件存放在 target 目录下,在控制台中看到有如下输出则表示输出成功:
为了验证打包成功,可以以 jar 方式运行打包好的 ch8.deploy-O .O. l-SNAPSHOT.jar:
>java -jar target/target/ch8.deploy-0.0.1-SNAPSHOT.jar:
可以将此 jar 文件部署到服务器上,以 jar 方式运行。通常情况下,还需要指定服务器端口、数据库连接地址等信息,我们将在多环境部署中详细讲解。简单的方法是在上面的命令行中传入系统属性,比如,如果应用使用的端口是 8000,数据库的密码是 Testl23 ! C 假设数据库用户名在多环境中保持统一〉 :
>java -jar -Dserver.port=9000 -Dspring . datasource.password=Testl23!
target/chS.deploy-0.0.1-SNAPSHOT.jar
另外一种传入配置的方法是使用命令行参数的方式传递
java -jar target/target/ ch8 . deploy-0. 0 . 1-SNAPSHOT . jar -- server . port=9000
--spring . datasource .password= Testl 23!
8.2 以war方式部署
Spring Boot 默认 自带了一个嵌入式的 Tomcat 服务器,可以以 jar 方式运行,更为常见的情
况是需要将 Spring Boot 应用打成一个 war 包, 部署到 Tomcat 、 Jetty 服务器,或者商业的 Weblogic 、Websphere 上。这种情况下,需要将 porn 中的 packaging 改成 war 方式:
<packaging>war</packaging>
需要将嵌入的 Tomcat 依赖方式改成 provided , 因此增加如下依赖说明 :
<scope>provided</scope>
还需要对 Main 类进行修改,使其继承 SpringBootServletlnitializer 类,并重载 configure 方
法,代码如下:
/**
*
* 这种部署方式适合 Servlet3.0 的 容器,对于 Tomcat? 、 Jetty9 、 Undertowl.2 以上
均支持
*如果在servlet2.5 容器上部署,请参考 http://ibeetl.com/sb2/#more
*/
@SpringBootApplication
public class Ch8Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Ch8Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Ch8Application.class, args);
}
}
8.3 多环境部署
Spring Boot 应用 简化 了配置,所有重要的配置属性都放在 application.properties中 。 Spring Boot 允许准备多个配置文件, 可 以在系统部署 的时候 ,指定使用哪个配置文件覆盖默认的 application.properties , 从而完成多环境部署。
需要在 resources 下创建 application-{profile }.properties 的配置文件, 其中 profile 可以是任意名字,比如 :
test , 表示测试环境 :
prod ,表示线上环境 ;
pre-prod , 预发布环境 :
demo1.0,1.0 版本演示环境。
8.4 @Profile注解
系统属性 spring.profiles.active 可以指定使用哪种配置文件,如果指定 test,则 applicationtest. properties 会覆盖默认的 application.properties 。
@Profile 注解可以支持使用多种 profile,也可以使用“!”来排除特定 profile 。
@Profile( {“test“,”prod”}),测试环境和线上环境生效:
@Profile( {“test“,”prod”}),测试环境和非线上环境生效。