前几天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. Docker基础内容之资源限制

    内存限制 --memory:内存限定,格式是数字加单位,单位可以为 B.K.M.G.最小为 4M. --memory-swap:交换分区大小限定 CPU限制 --cpus:表示分配给容器可用的cpu资 ...

  2. Kubernetes-Ingress资源详解

    什么是Ingress #阿里云称之为ingress路由!在 Kubernetes 集群中,主要用于接入外部请求到k8s内部,Ingress是授权入站连接到达集群服务的规则集合,为您提供七层负载均衡能力 ...

  3. mysql 5.7中 count(0) count(*) count(主键) count(非空字段)效率比较

    mysql count(0) count(*) count(主键) count(非空字段) 效率比较 写代码的时候经理在背后说了一句count(0)的效率高于count(*) ,索性全部测试了一下 结 ...

  4. 死磕mysql(4)

    想把论坛和博客上所有关于mysql的都看一遍,死磕到底 看到关于数据库快照的东西.......不懂,百度......然后就跑题了,看到了表锁这种东西unlock tables; 用来锁定表..... ...

  5. Dubbox 环境搭建-新(Windows下)

    分布式服务框架 dubbo/dubbox 入门示例 dubbo是一个分布式的服务架构,可直接用于生产环境作为SOA服务框架. 官网首页:http://dubbo.io/ ,官方用户指南 http:// ...

  6. 命令行压缩解压缩一 7z

    命令行压缩解压缩一 7z  1) 简介  7z,全称7-Zip, 是一款开源软件.是目前公认的压缩比例最大的压缩解压缩软件.  主页:http://www.7-zip.org/  中文主页:http: ...

  7. Python3(十一) 原生爬虫

    一.爬虫实例 1.原理:文本分析并提取信息——正则表达式. 2.实例目的:爬取熊猫TV某个分类下面主播的人气排行 分析网站结构 操作:F12查看HTML信息,Ctrl+Shift+C鼠标选取后找到对应 ...

  8. 将win10激活为专业工作站版并且永久激活(图文详细教程)

    简介 win10升级为专业版.教育版.专业工作站版永久激活详细图文教程(注:只要使用相对应的产品密钥,所有的版本都可以激活) win10家庭版其实就是阉割版,越来越多的人想升级为专业版.很多电脑用户选 ...

  9. mysql 查询指定数据库所有表, 指定表所有列, 指定列所有表 所有外键及索引, 以及索引的创建和删除

    查询指定 数据库 中所有 表 (指定数据库的,所有表) // 可以把 TABLE_NAME 换成 * 号, 查看更丰富的信息 SELECT TABLE_NAME FROM information_sc ...

  10. Lweb and String 超级大水题

    Lweb and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...