SpringBoot项目用maven命令的方式打包成外部tomcat部署的war包_qq_34135615的博客-程序员秘密

技术标签: spring  spring boot  java  tomcat  maven  

1 打开对应springBoot项目的pom.xml文件,添加和修改对应的配置文件
1.1 在pom.xml添加打成.war文件的配置war

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.baidu</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<!-- 指定打包的方式 -->
	<packaging>war</packaging>
	<description>Demo project for Spring Boot</description>

1.2 覆盖springboot内置的tomcat

<!-- 部署在外部tomcat打包工具 -->
		<dependency>
		   <groupId>org.springframework.boot</groupId>
		   <artifactId>spring-boot-starter-tomcat</artifactId>
		   <scope>provided</scope>
		</dependency>

1.3 指定打成war文件的名称

	<build>
		<!-- 自定义war包名 -->
		<finalName>demo</finalName>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

2继承org.springframework.boot.web.servlet.support.SpringBootServletInitializer,覆写configure方法:实现servlet 初始化启动类

方式一, 新增加一个类继承SpringBootServletInitializer实现configure:


package com.baidu;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

public class SpringBootStart extends SpringBootServletInitializer {
    
	
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    
		//DemoApplication类带有@springbootApplication注解启动类
		return builder.sources(DemoApplication.class);
	}
}

方式二,启动类继承SpringBootServletInitializer实现configure:

public class ServletInitializer extends SpringBootServletInitializer {
    

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    
        //此处的Application.class为带有@SpringBootApplication注解的启动类
        return builder.sources(Application.class);
    }

}

注意,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer。

如果你喜欢运行一个嵌入式Web服务器,那么你根本不需要这个。

@SpringBootApplication
public class Application {
    

    public static void main(String[] args) {
    
        SpringApplication.run(Application.class, args);
    }

}

注意事项:

使用外部Tomcat部署访问的时候,application.properties(或者application.yml)中配置的

server.port=

server.servlet.context-path=

将失效,请使用tomcat的端口,tomcat,webapps下项目名进行访问。

为了防止应用上下文所导致的项目访问资源加载不到的问题,建议pom.xml文件中标签下添加标签:

<build>
    <!-- 应与application.properties(或application.yml)中context-path保持一致 -->
    <finalName>war包名称</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

使用mvn命令行打包,运行:
clean是清除之前的包,-Dmaven.test.skip=true是忽略测试代码
jar 方式打包,使用内置Tomcat:mvn clean install -Dmaven.test.skip=true
运行:java -jar 包名.jar
war方式打包,使用外置Tomcat:mvn clean package -Dmaven.test.skip=true
运行:${Tomcat_home}/bin/目录下执行startup.bat(windows)或者startup.sh(linux)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34135615/article/details/105028565

智能推荐

CSS实战样式:文字两侧加居中横线_css横线居中_Bumphy的博客-程序员秘密

CSS实战样式:文字两侧加居中横线在日常的开发中,会遇到这样的需求

React Native 自定义Android原生组件_reactnative原生组件_weidiezeng的博客-程序员秘密

封装自定义Rn组件组件目录结构── android // 存放Android library│ ├── build│ ├── build.gradle│ ├── libs│ ├── proguard-rules.pro│ ├── src├── js // 存放js桥接过来的组件以及api│ └── JMVideoLineView.js├── index.js├── ios // 存放iOS library│ ├── TestModule│ └──

004、STM32CubeMX系列教程 LL库-PWM(控制蜂鸣器)_ll库 pwm_奔跑的小野猪~~~的博客-程序员秘密

https://gitee.com/xushicheng1202/stm32-cube-mx_LL.git这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。1、使用STM32CubeMX配置定时器TIM1。2、配置时钟3、设置路径、工程名称等4、更改为LL库5、代码测试5.1、main.c文件main函数中,有MX_TIM2_Init();的初始化函数,可以查看其初始化源码(保持stm32cubemx生成的不变,无需更改)...

仿射变换&透视变换_Fishmemory的博客-程序员秘密

介绍图像处理中的两种几何变换:仿射变换和透视变换。

App适配iPhone 6/ Plus和iOS 8:10条小秘诀_weixin_34266504的博客-程序员秘密

(原文:raywenderlich作者:Jack Wu 译者:@TurtleFromMars)过节啦!为庆祝佳节,看看我给这篇文章写的这段极客小诗吧:“Keynote前夜,无人知晓,新API能否登场对Siri的期待,Touch ID的希望而此刻iOS 8应声而出,震惊全场扩展,Swift,Metal,整整一箩筐通用Storyboard,又有谁曾料想一片欢呼声中,有人开始迷惘...

低代码平台有哪些好处?重点关注这5个核心点_吉鼎科技的博客-程序员秘密

自从低代码火了之后,有人唱衰有人捧,反对的人认为对于那些真正的程序员来说,简直就是毒瘤,只是炒作的概念而已,等尘埃落地,肯定是一地鸡毛。但是对于那些缺技术、缺人才,又需要数字化的企业来说,简直就是救命稻草,毕竟能够低成本高效率的实现系统应用,谁不想尝试呢?而且随着市场的实践证明,低代码平台并非部分人所说的“伪需求”,而是真正能够解决问题的“刚需”。那么低代码平台到底能解决什么问题呢?这5个核心点,或许可以让你明白!1、缩短开发周期图形化界面拖拉拽的方式搭建业务流程,后台进行代码生成,减少前端和后端

随便推点

Mac 安装homebrew报错fatal: unable to access ‘https://github.com/Homebrew/brew/‘: LibreSSL SSL_connect: S_像树_的博客-程序员秘密

复制homebrew官网指令下载Mac 安装homebrew 报错fatal: unable to access ‘https://github.com/Homebrew/brew/’: LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决办法https://www.ipaddress.com/查询无法获取的ip地址然后将ip地址填入本机的host文件里保存之后,重新运行homebrew的下.

2 socket循环接收数据 socket循环接收大数据 问 socket异步接收数据_很萌很蠢的博客-程序员秘密

2 socket循环接收数据 socket循环接收大数据 问 socket异步接收数据

小米平板4twrp一键刷入工具_不要浪费小米10的双扬声器!杜比全景音刷入教程分享..._weixin_39957027的博客-程序员秘密

小米10系列真双扬声器成为众多友商羡慕的对象,毕竟很多手机厂商都依靠扬声器+听筒的方式创造伪立体声,但是受限于听筒的惨烈音质,双声道合单声道方案是目前最常见的,所以很多手机的扬声器声音一大就变老人机,不仅音效音质全无,还会沙沙作响。小米10系列和一众妖艳贱货完全不同,物理双扬声器双声道,最高音量高出一倍有余,可惜声音效果实在不能苟同,还好,安卓手机有Dolby和蝰蛇两位老大加成,只要你物...

归并排序--算法_归并排序采用了什么算法_程序员的修养的博客-程序员秘密

思路归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而**治(conquer)**的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分:将无序序列分成有序的序列治:将有效的序列进行合并代码如下//合并有序数组void merge(int arr【】,int L,int M,int R){ int leftsize=M-L;

AlphaPose源代码学习之getPrediction()函数_alphapose提取关键点坐标_想成为书呆子的博客-程序员秘密

该函数的作用是从预测的热力图中获取关键点,位于eval.py中,完整代码如下def getPrediction(hms, pt1, pt2, inpH, inpW, resH, resW): ''' 从热力图中获得关键点 ''' assert hms.dim() == 4, 'Score maps should be 4-dim' maxval, idx = torch.max(hms.view(hms.size(0), hms.size(1), -1), 2)

MySql实现row_number() over(partition by)_mysql实现rownumber over partition by_雨细昆孤飞的博客-程序员秘密

1,MySql5.7版本SELECT * FROM(SELECT a.*,@rn:= CASE WHEN @securityid = sxbelecid THEN @rn + 1 ELSE 1 END AS rn,@securityid:= sxbelecid as sxbelecidfFROM(SELECT * from table WHERE nowtime &gt;= '2020-02-01 00:00:00'AND nowtime &lt;= '2020-02-01 01:0.

推荐文章

热门文章

相关标签