1. 程式人生 > >SpringBoot2.0-使用gradle打war包部署

SpringBoot2.0-使用gradle打war包部署

環境:IntelliJ idea + SpringBoot2.0 + gradle4.8 + tomcat8
由於SpringBoot程式內部集成了tomcat,故官方推薦開發者將專案打成jar包,並且用java -jar xx.jar執行專案;但是在實際開發中,開發者仍習慣將web專案打為war包並部署到伺服器tomcat中,方便啟動和監控專案的情況。

一、build.gradle

//表示打包方式為war
apply plugin: 'war'

//排除SpringBoot內建的tomcat
providedCompile("org.springframework.boot:spring-boot-starter-tomcat")

二、繼承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); }
}

三、使用gradle打war包

在專案路徑中呼叫命令列,執行gradle build命令,即可在libs中找到該war包

四、部署錯誤

將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即可解決該問題。

五、打Jar包

若需要打Jar包,則不需要前面幾步的配置,而只需要使用命令gradle build即可