文章目录
环境:IntelliJ idea + SpringBoot2.0 + gradle4.8 (maven)+ tomcat8
由于SpringBoot程序内部集成了tomcat,故官方推荐开发者将项目打成jar包,并且用java -jar xx.jar
运行项目;但是在实际开发中,开发者仍习惯将web项目打为war包并部署到服务器tomcat中,方便启动和监控项目的情况。
更多关于SpringBoot的总结请点击:SpringBoot使用总结
一、使用Gradle打War包运行
1.1、修改build.gradle
//表示打包方式为war
apply plugin: 'war'
//排除SpringBoot内置的tomcat
providedCompile("org.springframework.boot:spring-boot-starter-tomcat")
1.2、继承SpringBootServletInitializer
在SpringBoot的启动类上继承SpringBootServletInitializer并且重写configure方法,让SpringBoot在启动时启动Servlet3.0,并以此为入口
@SpringBootApplication
@MapperScan("com.iteason.springboot_mybatis2.mapper")
@EnableTransactionManagement
public class SpringbootMybatis2Application extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatis2Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootMybatis2Application.class);
}
}
1.3、使用gradle打war包
在项目路径中调用命令行,执行gradle build
命令,即可在libs
中找到该war包
1.4、部署错误
将war包移动到tomcat的webapps
中并启动tomcat进行部署,出现以下错误:
严重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/test]]
...
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'defaultValidator' defined in class path resource
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean]: Factory method 'defaultValidator' threw exception; nested exception is java.lang.NoClassDefFoundError: javax/el/ELManager
...
这个问题产生的原因是使用了低于tomcat8
版本的tomcat部署,而SpringBoot默认是以tomcat8
进行部署的,所以会报错,下载新版本tomcat即可解决该问题。
二、使用Gradle打Jar包
若需要打Jar包,则不需要前面几步的配置,而只需要使用命令gradle build
即可打出Jar包了。
三、使用Maven打War包
3.1、修改pom.xml
<properties>
<!-- 打包方式为Jar包 --!>
<packaging>war</packaging>
</properties>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<dependency>
<!-- 将SpringBoot自带的tomcat依赖设置成为由开发者提供 --!>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3.2、修改启动类
启动类需要继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
四、使用Maven打Jar包
4.1、修改pom.xml
<properties>
<!-- 打包方式为Jar包 --!>
<packaging>jar</packaging>
</properties>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 配置启动类位置--!>
<mainClass>com.example.springboot_mybatis_test.SpringbootMybatisTestApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
4.2、进入项目中,调用命令行
打包前清理target并且打包:
mvn clean package
之后将在项目的target目录下得到可运行的jar包,运行jar包的方式:
java -jar xxxx.jar