当前位置:   article > 正文

SpringBoot系列:SpringBoot打包成war,并在tomcat下运行_springboot打包成一个可以在tomcat运行的war包

springboot打包成一个可以在tomcat运行的war包

1、实现继承SpringBootServletInitializer类

  1. package com.example.demo;
  2. import org.springframework.boot.builder.SpringApplicationBuilder;
  3. import org.springframework.boot.web.support.SpringBootServletInitializer;
  4. public class ServletInitializer extends SpringBootServletInitializer {
  5. @Override
  6. protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
  7. return application.sources(DemoApplication.class);
  8. }
  9. }

  1. package com.example.demo;
  2. import javax.servlet.Filter;
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
  6. import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.web.filter.CharacterEncodingFilter;
  9. @SpringBootApplication
  10. public class DemoApplication {
  11. // 用于处理编码问题
  12. @Bean
  13. public Filter characterEncodingFilter() {
  14. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  15. characterEncodingFilter.setEncoding("UTF-8");
  16. characterEncodingFilter.setForceEncoding(true);
  17. return characterEncodingFilter;
  18. }
  19. /**
  20. * mvn打包后,需要指定内嵌tomcat的服务,否则会“找不到EmbeddedServletContainerFactory”报错
  21. * 也可以使用jetty服务
  22. * @return
  23. */
  24. @Bean
  25. public EmbeddedServletContainerFactory servletContainer() {
  26. TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
  27. return factory;
  28. }
  29. public static void main(String[] args) {
  30. SpringApplication.run(DemoApplication.class, args);
  31. }
  32. }

2、将SpringBoot打包方式改成war

<packaging>war</packaging>

3、在pom中将spring-boot-starter-tomcat的scope设置成provided

如果打包成war时,不会打包tomcat相关的jar

如果打包成jar时,会打包tomcat相关jar

  1. <!-- scope=provided,当打包成war时不会将tomcat.jar打包进去;当直接eclipse执行DemoApplication时需要
  2. 一定要配置<scope>provided</scope>
  3. -->
  4. <dependency>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-tomcat</artifactId>
  7. <scope>provided</scope>
  8. </dependency>

4、配置maven-war-plugin插件

注意:failOnMissingWebXml要设置成false,因为springboot是没有web.xml,否则mvn会出错

outputDirectory设置成tomcat下webapps目录下,可以自动复制到webapps目录下

  1. <!-- war发布打包,并war包直接输出到tomcat下 -->
  2. <plugin>
  3. <groupId>org.apache.maven.plugins</groupId>
  4. <artifactId>maven-war-plugin</artifactId>
  5. <configuration>
  6. <!-- 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 -->
  7. <failOnMissingWebXml>false</failOnMissingWebXml>
  8. <warName>myweb</warName>
  9. <archive>
  10. <manifest>
  11. <mainClass>${start-class}</mainClass>
  12. <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
  13. </manifest>
  14. </archive>
  15. <skipTests>true</skipTests>
  16. <skip>true</skip><!-- 跳过测试 -->
  17. <testFailureIgnore>true</testFailureIgnore>
  18. <!-- 将war包直接输出到tomcat下webapps目录下 -->
  19. <outputDirectory>${outputDirectory}</outputDirectory>
  20. </configuration>
  21. </plugin>

5、完整配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.example</groupId>
  6. <artifactId>demo</artifactId>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>demo</name>
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  13. <java.version>1.7</java.version>
  14. <springboot.version>1.5.13.RELEASE</springboot.version>
  15. <outputDirectory>D:/Program Files/Tomcat/apache-tomcat-7.0.70/webapps</outputDirectory>
  16. </properties>
  17. <dependencyManagement>
  18. <dependencies>
  19. <!--springboot相关依赖 -->
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-dependencies</artifactId>
  23. <version>${springboot.version}</version>
  24. <type>pom</type>
  25. <scope>import</scope>
  26. </dependency>
  27. </dependencies>
  28. </dependencyManagement>
  29. <dependencies>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-web</artifactId>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-devtools</artifactId>
  37. <scope>runtime</scope>
  38. </dependency>
  39. <!-- scope=provided,当打包成war时不会将tomcat.jar打包进去;当直接eclipse执行DemoApplication时需要
  40. 一定要配置<scope>provided</scope>
  41. -->
  42. <dependency>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-starter-tomcat</artifactId>
  45. <scope>provided</scope>
  46. </dependency>
  47. <dependency>
  48. <groupId>org.springframework.boot</groupId>
  49. <artifactId>spring-boot-starter-test</artifactId>
  50. <scope>test</scope>
  51. </dependency>
  52. </dependencies>
  53. <build>
  54. <plugins>
  55. <!-- 编译插件,以${java.version}编译 -->
  56. <plugin>
  57. <groupId>org.apache.maven.plugins</groupId>
  58. <artifactId>maven-compiler-plugin</artifactId>
  59. <configuration>
  60. <source>${java.version}</source>
  61. <target>${java.version}</target>
  62. </configuration>
  63. </plugin>
  64. <!-- war发布打包,并war包直接输出到tomcat下 -->
  65. <plugin>
  66. <groupId>org.apache.maven.plugins</groupId>
  67. <artifactId>maven-war-plugin</artifactId>
  68. <configuration>
  69. <!-- 设置成false,否则检查web.xml是否存在。因为springboot是没有web.xml的 -->
  70. <failOnMissingWebXml>false</failOnMissingWebXml>
  71. <warName>myweb</warName>
  72. <archive>
  73. <manifest>
  74. <mainClass>${start-class}</mainClass>
  75. <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
  76. </manifest>
  77. </archive>
  78. <skipTests>true</skipTests>
  79. <skip>true</skip><!-- 跳过测试 -->
  80. <testFailureIgnore>true</testFailureIgnore>
  81. <!-- 将war包直接输出到tomcat下webapps目录下 -->
  82. <outputDirectory>${outputDirectory}</outputDirectory>
  83. </configuration>
  84. </plugin>
  85. <!-- jar发布打包,并jar包直接输出到指定目录下 -->
  86. <!-- <plugin>
  87. <groupId>org.springframework.boot</groupId>
  88. <artifactId>spring-boot-maven-plugin</artifactId>
  89. <version>1.5.9.RELEASE</version>
  90. <configuration>
  91. 指定该Main Class为全局的唯一入口
  92. <mainClass>com.example.demo.DemoApplication</mainClass>
  93. <layout>ZIP</layout>
  94. <outputDirectory>${outputDirectory}</outputDirectory>
  95. </configuration>
  96. <executions>
  97. <execution>
  98. <goals>
  99. <goal>repackage</goal>可以把依赖的包都打包到生成的Jar包中
  100. </goals>
  101. </execution>
  102. </executions>
  103. </plugin> -->
  104. <!-- 将resources目录下文件打包进去 -->
  105. <plugin>
  106. <groupId>org.apache.maven.plugins</groupId>
  107. <artifactId>maven-resources-plugin</artifactId>
  108. <configuration>
  109. <encoding>UTF-8</encoding>
  110. <delimiters>
  111. <delimiter>@</delimiter>
  112. </delimiters>
  113. <useDefaultDelimiters>false</useDefaultDelimiters>
  114. </configuration>
  115. </plugin>
  116. <plugin>
  117. <groupId>org.apache.maven.plugins</groupId>
  118. <artifactId>maven-surefire-plugin</artifactId>
  119. <configuration>
  120. <skipTests>true</skipTests>
  121. </configuration>
  122. </plugin>
  123. </plugins>
  124. </build>
  125. </project>

6、运行tomcat并访问

通过http://127.0.0.1:8080/myweb/index访问

如果不需要contextPath, 可以将war打包到webapps下的ROOT目录, 则http://127.0.0.1:8080/index访问

注意:application.properties中的端口和contextPath配置不再生效了,而是使用tomcat的方式

  1. server.port=8081
  2. server.context-path=/mydemo

代码已上传到github:https://github.com/suncht/sun-test/tree/master/springboot.tomcat.test


声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号