SpringBoot作为一个框架工具,不仅能够帮助开发者快速构建应用程序,还能够使得应用程序更加灵活运用。在实际项目开发中,将SpringBoot应用程序打成WAR包后进行部署是很常见的一种方法,本文将介绍SpringBoot WAR包部署的方法及其相关细节。
一、WAR包部署原理
WAR文件的全称是Web Application Archive,通常也叫Web应用程序压缩包。将这种类型的压缩包部署到web服务器上,就可以让web服务器来帮助我们将其解压并运行。而SpringBoot应用程序的WAR包部署也是类似,它是将整个应用程序打包成一个压缩包,以web应用程序的形式部署到web服务器上。
SpringBoot项目如果需要打成WAR包,需要在pom.xml文件中进行相应的配置。通常在<packaging>节点下设置为war,如下所示:
<packaging>war</packaging>
在进行WAR包部署之前,需要先将应用程序打成一个可执行的WAR包。可以使用如下Maven指令打包:
mvn clean package
执行此指令之后,会在target目录下生成一个*.war的可执行WAR包。
二、WAR包部署步骤
Step1:添加SpringBoot启动类
将SpringBoot项目打成WAR包需要在应用程序的启动类上添加一个extends SpringBootServletInitializer的类继承关系,并覆写configure方法。代码如下:
package com.example.springbootdemo;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootDemoApplication.class);
}
}
其中SpringBootDemoApplication.class替换成您的SpringBoot应用程序的启动类。
Step2:修改pom.xml文件
在之前的pom.xml文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
这些依赖的加入是为了引入Tomcat容器以及Servlet规范API。
Step3:修改打包方式
在之前的pom.xml文件中,打包方式是jar包。要修改为war包需要更改属性的设置,具体修改如下:
<packaging>war</packaging>
...
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>-Dspring.profiles.active=product</jvmArguments>
</configuration>
...
在这里将<packaging>属性设置为war,然后在<build><plugins><plugin>下面添加spring-boot-maven-plugin插件。同时我们将在应用程序中使用profile进行配置,以便在激活时能够根据需要获取不同的配置文件。
Step4:打包WAR包
完成上述修改之后,使用mvn clean package命令进行打包即可。在编译完毕之后,会在target目录生成一个.war文件。
Step5:部署到Tomcat
在Tomcat的$TOMCAT_HOME/webapps目录下,放置新生成的WAR包。Tomcat会自动解压,启动该应用程序。
三、WAR包部署注意事项
1、Port冲突
在Tomcat中部署WAR包时,应该避免端口冲突。启动Tomcat服务器并发布WAR包后,服务器可能会遇到端口占用问题。可以在Tomcat内的server.xml文件中更改端口号解决。除此之外,SpringBoot还支持使用外部的服务端口号,可以在application.properties或application.yml中指定。
2、静态资源访问
在WAR包部署下,src/main/resources/static或src/main/resources/public中的静态资源不再存在,会被打包进WAR包的根目录下。所以,URL和classpath访问这些文件时需要使用特定的相对路径,参考下面的代码:
http://localhost:8080/{yourAppName}/{yourResourcePath}
ClassPathResource resource = new ClassPathResource("/{yourResourcePath}");
3、数据源配置
在WAR包部署下,数据源的配置需要放在/WEB-INF/classes/application.properties或application.yml文件中。示例如下:
#Properties
spring.datasource.url=jdbc:postgresql://localhost:5432/my_db
spring.datasource.username=user
spring.datasource.password=pass
#YAML
spring:
datasource:
url: jdbc:postgresql://localhost:5432/my_db
username: user
password: pass
4、JSP页面处理
在WAR包部署下,SpringBoot默认不支持使用JSP页面。我们需要进行额外的配置才能使其实现。通常需要在Web项目的配置文件中,添加如下代码:
@Bean
public InternalResourceViewResolver jspViewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
同时,也需要在application.properties/application.yml文件中配置视图文件的路径,如下所示:
#Properties
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#YAML
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
四、小结
通过本篇文章的详细介绍,我们了解到了SpringBoot WAR包部署的整个流程,包括如何打成WAR包、如何部署和相关注意事项。希望这些内容能够帮助您更好地了解War包部署。
最后,附上一个小例子,这个例子可以让你更好地理解本文所讲内容:
package com.example.springbootdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class SpringBootDemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootDemoApplication.class);
}
@GetMapping("/")
public String hello(){
return "hello, world!";
}
}
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/201073.html
微信扫一扫
支付宝扫一扫