前几天springboot项目部署到linux中,整个过程就是个坑啊。踩坑的过程中也学到了许多。spring boot 项目部署时由于其内置了tomcat和jdk,而且还都是8。 所以部署的话就分为两种部署了, 第一种就是使用其内置的tomcat部署, 第二种就是采用外部的tomcat部署。采用内部的tomcat部署又分为两种: 第一种是打包成war包部署,第二种事打包成jar包部署。 两者区别就在于打包成jar包的是无静态资源的,如jsp,HTML等,像只是提供restful接口。

    阅读此篇博客请先去阅读本人的spring boot 常用注解

    除了必要的jar,插件外还需导入 spring-boot-maven-plugin 插件

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.6.RELEASE</version>
<configuration>
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.spSystem.App</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

    采用外置tomcat部署时要注意:

    1. 依赖jar包的冲突

    由于spring boot 内置了tomcat,jdk,servlet等,所以部署到外部tomcat中时要将其内置的tomcat,servlet等设置为只在编译和测试时使用

            <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!-- 去除Spring Boot自带的Tomcat插件 -->
<scope>provided</scope>
            </dependency>           <!-- 配置低版本Tomcat,否则需8.5以上版本,请根据自己的Tomcat版本配置 -->
            <properties> 
              <tomcat.version>7.0.77</tomcat.version>
            </properties>

    2. 程序主入口是什么

    项目中内置了servlet,程序的主入口原先是main方法,使用main方法自启动。 所以我们要将其重写

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

    3.导入相应jar包的maven依赖时其相对应的版本

    由于spring boot与jdk,spring cloud 都有相对应的版本,所以导入jar包maven依赖时要配对好。 spring boot 2.0及以上的对应jdk1.8, spring cloud Finchley 版。 jdk 1.7 对应的是 spring boot 1.5 (1.0版)

    

    4. 部署到tomcat后程序的访问路径

    本地中启动项目访问是没有项目名的,但部署上去后。访问路径要加上项目名了(如:http://IP:端口/项目名/路由)

    采用内置tomcat 部署 :

    导出jar 包(同maven 导 jar 包,导war 包相同)采用内置tomcat 部署 将jar 包放入linux 中的一个目录, 然后进入其所在目录,执行

# spSystem.jar: jar包
# springboot.log: 执行命令后所生成的项目运行log(命令执行完,查看此log看看项目是否启动成功)
# &1 &:将此项目设置为守护进程,要不然黑窗口一关项目也就停止了
nohup java -jar spSystem.jar >springboot.log 2>&1 &

    采用内置tomcat部署时要注意:同上 1, 3

    当采用内置tomcat 部署时 没有导入 spring-boot-maven-plugin 插件 maven依赖 或者 没有在依赖中指定程序的主入口 都会报 no  main  in xx.jar

    当注意1的时候, 就是与采用外部tomcat 部署相反了,把<scope>provided</scope>注释掉,或者把tomcat等的maven 依赖注释去除

    当注意3 的时候, 就会报XXXXX 52 版本冲突

    关闭程序,杀死进程就可以了

    在此,希望此篇博客能帮助到一些人。有不足之处,有问题的话可以博客上Q我,看到就会回复  

spring boot tomcat 部署的更多相关文章

  1. 多个Spring Boot项目部署在一个Tomcat容器无法启动

    转自https://www.cnblogs.com/tomxin7/p/9434085.html 业务介绍 最近用Spring Boot开发了一个翻译的小项目,但是服务器上还跑着其他项目,包括一个同样 ...

  2. 玩转spring boot——war部署

    前言 之前部署spring boot应用是通过直接输入命令“java -jar”来实现的.而有些情况,由于部署环境的制约,只能把项目从jar转换成war才能部署,如新浪云sae的java环境容器.那怎 ...

  3. Spring Boot打包部署

    date: 2018-11-19 15:30:11 updated: 2018-11-21 08:28:37 Spring Boot打包部署 第一种方式 打包成jar包部署在服务器上 1.1 添加插件 ...

  4. Spring Boot 系列(六)web开发-Spring Boot 热部署

    Spring Boot 热部署 实际开发中,修改某个页面数据或逻辑功能都需要重启应用.这无形中降低了开发效率,所以使用热部署是十分必要的. 什么是热部署? 应用启动后会把编译好的Class文件加载的虚 ...

  5. spring boot: 热部署spring-boot-devtools

    spring boot: 热部署spring-boot-devtools 1引入spring-boot-devtools依赖包 <!-- spring boot devtools 热部署 --& ...

  6. spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar)

    spring boot: 热部署(一) run as – java application (spring-loader-1.2.4.RELEASE.jar) 如果使用的run as – java a ...

  7. 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

    实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...

  8. Spring Boot 热部署(转)

    Spring Boot 热部署 实际开发中,修改某个页面数据或逻辑功能都需要重启应用.这无形中降低了开发效率,所以使用热部署是十分必要的. 什么是热部署? 应用启动后会把编译好的Class文件加载的虚 ...

  9. Spring Boot热部署插件

    在实际开发中,我们修改某些代码逻辑功能或页面都需要重启应用,这无形中降低了开发效率,热部署是指当我们修改代码后,服务能自动重启加载新修改的内容,而不需要重启应用,这样大大提高了我们开发的效率. Spr ...

随机推荐

  1. CTF--HTTP服务--路径遍历(提升root用户权限)

    开门见山 1. 在上次实验取的靶机低用户权限,查看该系统的内核版本 2. 查看该系统的发行版本 3. 查看该内核版本是否存在内核溢出漏洞,并没有 如果有内核溢出漏洞,则可以 4. 在靶机查看/etc/ ...

  2. springboot2.x整合spring-data-jpa的问题

    今天使用springboot整合spring-data-jpa遇到一些问题,直接使用JpaRepository的getOne()方法是会报错的.报错信息为:org.hibernate.LazyInit ...

  3. 如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?

    Java能力和面试能力,这是两个方面的技能,可以这样说,如果不准备,一些大神或许也能通过面试,但能力和工资有可能被低估.再仔细分析下原因,面试中问的问题,虽然在职位介绍里已经给出了范围,但针对每个点, ...

  4. VS生成垃圾文件清理

    @echo Off del /s /a *.txt *.exe *.suo *.ncb *.user *.dll *.pdb *.netmodule *.aps *.ilk 2>nul FOR ...

  5. [sphinx]生成文档的工具

    安装: pip install sphinx 新建文档项目 sphinx-quickstart 配置一些设置选项, 生成项目文件 生成html make html .\make.bat html #w ...

  6. throw throws区别

    1.throws是在方法上对一个方法进行声明,而不进行处理,向上传,谁调用谁处理: 格式: 权限修饰符 返回值类型 方法名(参数列表) throws Exception1,Exception2...{ ...

  7. Decorator - 装饰器

    装饰器 Decorator, 先来看看对 decorator 这个名词的解释, 一个可调用的对象 A (decorator), 返回另一个可调用的对象 B, 在可调用的对象 C 的定义体之前通过语法 ...

  8. 仅仅知道如何终止XHR请求,或许对你来说是不够的!

    TLDR: 当我们需要的时候,我们可以通过AbortController接口来终止一个或者多个请求. 前言 到目前为止,我们有两个常用的基本的手段去发送请求进而局部刷新页面内容,其一是XMR(XMLH ...

  9. javascript 浅复制 和 深复制

    如何区分深拷贝与浅拷贝,简单点来说,就是假设 B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝, 如果B没变,那就是深拷贝 实现思路 1 json 深度拷贝 2 遍历递归 ...

  10. pytoch之 encoder,decoder

    import torch import torch.nn as nn import torch.utils.data as Data import torchvision import matplot ...