将springboot项目导出成war包主要包含以下步骤:
步骤1: 在pom.xml文件中添加maven插件
我们需要在pom.xml文件中添加maven插件,以便能够将springboot项目构建成war包并将其部署到Tomcat等服务器上。我们可以使用maven-war-plugin或spring-boot-maven-plugin插件。此处以maven-war-plugin为例:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
配置参数解释:
* warSourceDirectory:指定war包中包含的静态文件、jsp等资源文件所在的目录,默认为src/main/webapp。
步骤2: 修改打包方式和入口类
我们需要修改springboot项目的打包方式以及项目的入口类。修改pom.xml文件如下所示:
<groupId>com.example</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
packaging属性设置为war后,maven构建时会自动将项目打包成一个war包。
同时,我们需要修改Springboot的入口类,使其继承SpringBootServletInitializer并重写configure()方法:
@SpringBootApplication
public class SpringbootDemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootDemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
步骤3: 编译war包
在命令行中进入项目根目录下,执行以下命令:
mvn package
执行完该命令后会在target目录下生成一个war包,名称为artifactId-version.war。
步骤4: 部署war包
将生成的war包上传到Tomcat等服务器上即可部署运行。
示例1:
假设我们有一个springboot-web项目,其工程结构如下:
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─example
│ │ │ └─springbootweb
│ │ │ SpringbootWebApplication.java
│ │ │
│ │ └─webapp
│ │ ├─static
│ │ ├─resources
│ │ └─WEB-INF
│ │ └─jsp
我们按照上述步骤进行如下修改:
创建warSourceDirectory目录,即src/main/webapp目录,将jsp文件和静态资源文件拷贝到该目录下;
在pom.xml文件中添加maven-war-plugin插件,并设置warSourceDirectory参数为src/main/webapp;
修改pom.xml文件的packaging属性为war;
修改Springboot的入口类,使其继承SpringBootServletInitializer并重写configure()方法;
执行mvn package命令,编译出springboot-web-0.0.1-SNAPSHOT.war包;
将war包上传到Tomcat服务器上即可部署运行。
示例2:
我们假设还有一个springboot-restful项目,它包含一个RestController,其代码如下:
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Springboot!";
}
}
上述步骤中修改操作除了入口类的修改外均相同,这里只说明入口类的修改。
我们需要修改Springboot的入口类,变为如下代码:
@SpringBootApplication
public class SpringbootRestfulApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootRestfulApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootRestfulApplication.class, args);
}
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createTomcatConnector());
return tomcat;
}
private Connector createTomcatConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setSecure(false);
connector.setPort(8080);
connector.setRedirectPort(8443);
return connector;
}
}
在该入口类中,我们使用@Bean注解定义了一个ServletWebServerFactory的bean,用于将Springboot项目嵌入到Tomcat容器中。同时,我们还必须创建并配置一条额外的TomcatConnector,将其添加到TomcatServletWebServerFactory中,使其能够接受http请求。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解如何将springboot项目导出成war包 - Python技术站