SpringBoot2.0-使用gradle打war包部署
阿新 • • 發佈:2018-12-11
環境: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
即可