每天都会分享Java架构文章,喜欢的朋友关注我。ps:文末有彩蛋,惊喜等着你

如果使用的是 SpringBoot 多模块的项目,在发布的时候可能遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数 SpringBoot 发布问题。

SpringBoot 多模块发布的 8 大原则

1 在发布模块打包,而不是父模块上打包

比如,以下项目目录:

如果要发布 api 就直接在它的模块上打包,而不是在父模块上打包。

2 公共调用模块,打包类型设置为 jar 格式

公共模块,比如 common 和 model 需要设置 packaging 为 jar 格式,在 pom.xml 配置:

jar

3 发布模块打包类型设置为 war 格式

在发布的模块 pom.xml 中设置:

war

4 排除内置 tomcat

在发布的模块 pom.xml 中设置:

org.springframework.boot spring-boot-starter-tomcat provided

当设置 scope=provided 时,此 jar 包不会出现在发布的项目中,从而就排除了内置的 tomcat。

5 设置启动类

此步骤相当于告诉 tomcat 启动的入口在哪。需要在启动类添加如下代码:

@SpringBootApplicationpublic class ApiApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(ApiApplication.class); } public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); }}

6 如果使用拦截器一定要排除静态文件

比如我在项目中使用了 swagger,那我就需要排除 swagger 的静态文件,代码如下:

@Configurationpublic class WebMvcConfig extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry) { // 排除静态文件 registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); } // do something}

7 先装载公共模块,再发布项目

如果发布的模块引用了本项目的其他公共模块,需要先把本项目的公共模块装载到本地仓库。

操作方式,双击父模块的 install 即可, install 成功之后,点击发布模块的 package 生成 war 包,就完成了项目的打包,如下图所示:

8 部署项目

有了 war 包之后,只需要把单个 war 包,放入 tomcat 的 webapps 目录,重新启动 tomcat 即可,如下图所示:

项目正常运行会在 webapps 目录下生成同名的文件夹,如下图所示:

完成以上配置,就可以 happy 的访问自己发布的项目了。

可能出现的问题和解决方案

问题一:SpringBoot 配置了端口号影不影响程序发布?

答:不影响,配置的 server.port 会被覆盖,以 tomcat 本身的端口号为准,tomcat 端口号在 tomcat/config/server.xml 文件中配置。

问题二:发布报错,不能找到其他模块或项目中的公共模块,怎么办?

答:因为没有执行父节点 maven 的 install 操作,install 就是把公共模块放入本地仓库,提供给其它项目使用。

问题三:不能找到 SpringBoot 运行的 main 类,怎么办?

答:因为没有设置启动类导致的,设置方式:

  • pom.xml 配置启动类,配置 configuration>com.bi.api.ApiApplication 。
  • 启动类继承 SpringBootServletInitializer 实现 SpringApplicationBuilder 方法,具体代码参考文中第五部分。

问题四:把 SpringBoot 项目部署到 Tomcat 7 一直提示找不到 xxx.jar 包?

答:这是因为 SpringBoot 版本太高,tomcat 版本太低的原因。如果你使用的是最新版的 SpringBoot,可以考虑把 tomcat 也升级为 tomcat 8.x+ 最新的版本,就可以解决这个问题。


彩蛋时间:免费分享Java系列技术资料,需要的朋友可以在后台私信我

作者:白天不懂夜的黑

链接:https://www.jianshu.com/p/7ab4fd0d565f

来源:知乎

声明:本文为二次转载,原文不可查

springboot公共模块打包_解决SpringBoot多模块发布时99%的问题?相关推荐

  1. 解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案

    如果使用 SpringBoot 多模块发布到外部 Tomcat,可能会遇到各种各样的问题.本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大 ...

  2. springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题

    springboot学习笔记:12.解决springboot打成可执行jar在linux上启动慢的问题 参考文章: (1)springboot学习笔记:12.解决springboot打成可执行jar在 ...

  3. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

  4. 模块打包之CommonJS与ES6模块比较初探

    Time: 20190920 模块是具有特定功能的组成单元,不同模块负责不同的工作,然后会以某种方式联系到一起,形成完整的程序逻辑. CommonJS CommonJS是2009年社区提出的,包含模块 ...

  5. 不同型号的二极管模块并联_有趣解读IGBT模块“续流二极管”

    IGBT 模块上有一个"续流二极管".它有什么作用呢? 答:当 PWM波输出的时候,它是维持电机内的电流不断用的. 我在说明变频器逆变原理的时候,用的一个电阻做负载. 电阻做负载, ...

  6. 【apktool正确打包流程】Apktool 打包失败解决办法【解包时必须带上-r参数,表示不解码资源文件】因为资源文件的接码会导致各种问题???

    Apktool 打包失败解决办法_Jasonzhiying的博客-CSDN博客 错误提示:brut.androlib.AndrolibException: brut.common.BrutExcept ...

  7. JAVA项目怎么不是蓝色_解决IDEA创建maven项目时pom.xml没有变蓝的问题

    如下所示: 选中pom.xml,右键点击add as maven project, 稍等片刻后就可以了 补充知识:Idea导入maven项目不自动识别pom.xml *Idea导入maven项目不自动 ...

  8. ds1302模块 树莓派_树莓派用4g模块实现三网通开机自启动

    测试环境: 树莓派3b+ &华为ME909S-821&联通(移动)电话卡 &树莓派官网最新镜像 实验链接实拍图 树莓派 1.测试ME909s模块 实物图 华为的ME909s 4 ...

  9. python吃显卡还是内存不足_解决Pytorch 训练与测试时爆显存(out of memory)的问题

    Pytorch 训练时有时候会因为加载的东西过多而爆显存,有些时候这种情况还可以使用cuda的清理技术进行修整,当然如果模型实在太大,那也没办法. 使用torch.cuda.empty_cache() ...

最新文章

  1. 《JavaScript高级程序设计》(第2版)上市
  2. Appium Desktop介绍-xcodebuild failed with code 65 问题解决
  3. 北京邮电大学计算机学院交换组,李静林-交换骨干教师-网络与交换技术国家重点实验室...
  4. 如何计算Nand Flash要传入的行地址和列地址
  5. 自己动手开发SAP Spartacus focus Directive的单元测试
  6. 形似“飞碟”的无人机你见过吗?它还可以灭火!
  7. 爬虫找工作要掌握什么_找爬虫工作必须掌握scrapy框架究竟什么?
  8. myftpadmin+proftpd+mysql架设ftp服务器_linux下用Proftpd搭建ftp服务器及配置方法
  9. 关闭win10任务视图功能
  10. 在哪个平台可以自助打印文件资料
  11. 在线工具:电脑怎么提取图片中的文字?图片如何转化为文字?
  12. 概论 经典车间生产调度问题模型及其算法
  13. PyTorch单机多卡训练(DDP-DistributedDataParallel的使用)备忘记录
  14. ESP32-C3 flash encryption secure boot
  15. SAP增强 BADI屏幕增强实例(MIGO增加分页签)
  16. cookie属性及有效期的设置
  17. Java设计模式之二工厂设计模式
  18. 有了Forter ,中国的跨境电商们可以安心做生意了
  19. 【GEOS】GEOS库学习之简单几何图形的创建
  20. UltraEdit添加到右键管理

热门文章

  1. 开源内容管理系统 php mysql_十大免费PHP+MySql平台内容管理系统推荐
  2. java 多线程的同步问题_java多线程解决同步问题的几种方式,原理和代码
  3. oracle11g ora 12518,servlet执行update报错ORA-12518
  4. pytorch 训练过程学习率设置衰减
  5. Redis(一):什么是NoSQL与NoSQL分类
  6. Problem H: 今年第几天?
  7. 备忘(持续更新。。。)
  8. 【转载】浏览器缓存详解:expires cache-control last-modified
  9. Ubuntu 忘记密码的处理方法
  10. Hive中生成随机唯一标识ID的方法