技术标签: 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)
CSS实战样式:文字两侧加居中横线在日常的开发中,会遇到这样的需求
封装自定义Rn组件组件目录结构── android // 存放Android library│ ├── build│ ├── build.gradle│ ├── libs│ ├── proguard-rules.pro│ ├── src├── js // 存放js桥接过来的组件以及api│ └── JMVideoLineView.js├── index.js├── ios // 存放iOS library│ ├── TestModule│ └──
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生成的不变,无需更改)...
介绍图像处理中的两种几何变换:仿射变换和透视变换。
(原文:raywenderlich作者:Jack Wu 译者:@TurtleFromMars)过节啦!为庆祝佳节,看看我给这篇文章写的这段极客小诗吧:“Keynote前夜,无人知晓,新API能否登场对Siri的期待,Touch ID的希望而此刻iOS 8应声而出,震惊全场扩展,Swift,Metal,整整一箩筐通用Storyboard,又有谁曾料想一片欢呼声中,有人开始迷惘...
自从低代码火了之后,有人唱衰有人捧,反对的人认为对于那些真正的程序员来说,简直就是毒瘤,只是炒作的概念而已,等尘埃落地,肯定是一地鸡毛。但是对于那些缺技术、缺人才,又需要数字化的企业来说,简直就是救命稻草,毕竟能够低成本高效率的实现系统应用,谁不想尝试呢?而且随着市场的实践证明,低代码平台并非部分人所说的“伪需求”,而是真正能够解决问题的“刚需”。那么低代码平台到底能解决什么问题呢?这5个核心点,或许可以让你明白!1、缩短开发周期图形化界面拖拉拽的方式搭建业务流程,后台进行代码生成,减少前端和后端
复制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异步接收数据
小米10系列真双扬声器成为众多友商羡慕的对象,毕竟很多手机厂商都依靠扬声器+听筒的方式创造伪立体声,但是受限于听筒的惨烈音质,双声道合单声道方案是目前最常见的,所以很多手机的扬声器声音一大就变老人机,不仅音效音质全无,还会沙沙作响。小米10系列和一众妖艳贱货完全不同,物理双扬声器双声道,最高音量高出一倍有余,可惜声音效果实在不能苟同,还好,安卓手机有Dolby和蝰蛇两位老大加成,只要你物...
思路归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而**治(conquer)**的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。分:将无序序列分成有序的序列治:将有效的序列进行合并代码如下//合并有序数组void merge(int arr【】,int L,int M,int R){ int leftsize=M-L;
该函数的作用是从预测的热力图中获取关键点,位于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)
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 >= '2020-02-01 00:00:00'AND nowtime <= '2020-02-01 01:0.