网站icp 备案进度查询,seo关键词排名优化怎么做,东莞手机端网络推广,手机百度建设网站如果使用 SpringBoot 多模块发布到外部 Tomcat#xff0c;可能会遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案#xff0c;掌握了这些原则和解决方案#xff0c;几乎可以解决绝大数 SpringBoot 发布问题。 SpringBoot 多模块发布的 8 …
如果使用 SpringBoot 多模块发布到外部 Tomcat可能会遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案掌握了这些原则和解决方案几乎可以解决绝大数 SpringBoot 发布问题。 SpringBoot 多模块发布的 8 大原则 1 在发布模块打包而不是父模块上打包
比如以下项目目录如果要发布 api 就直接在它的模块上打包而不是在父模块上打包。 2 公共调用模块打包类型设置为 jar 格式
公共模块比如 common 和 model 需要设置 packaging 为 jar 格式在 pom.xml 配置
packagingjar/packaging3 发布模块打包类型设置为 war 格式
在发布的模块 pom.xml 中设置
packagingwar/packaging4 排除内置 tomcat
在发布的模块 pom.xml 中设置
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-tomcat/artifactIdscopeprovided/scope
/dependency当设置 scopeprovided 时此 jar 包不会出现在发布的项目中从而就排除了内置的 tomcat。 5 设置启动类
此步骤相当于告诉 tomcat 启动的入口在哪。需要在启动类添加如下代码
SpringBootApplication
public class ApiApplication extends SpringBootServletInitializer {Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(ApiApplication.class);}public static void main(String[] args) {SpringApplication.run(ApiApplication.class, args);}
}6 如果使用拦截器一定要排除静态文件
比如我在项目中使用了 swagger那我就需要排除 swagger 的静态文件代码如下
Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {Overrideprotected 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 配置启动类配置 configurationmainClasscom.bi.api.ApiApplication/mainClass/configuration 。启动类继承 SpringBootServletInitializer 实现 SpringApplicationBuilder 方法具体代码参考文中第五部分。
问题四把 SpringBoot 项目部署到 Tomcat 7 一直提示找不到 xxx.jar 包
答这是因为 SpringBoot 版本太高tomcat 版本太低的原因。如果你使用的是最新版的 SpringBoot可以考虑把 tomcat 也升级为 tomcat 8.x 最新的版本就可以解决这个问题。