前几天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. 最短路径-Dijkstra+Floyd+Spfa

    Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...

  2. REST 风格架构

       ------------------------------ 时间不多了, 抓紧做一些有意义的事情 REST 风格架构   1. 他是面向资源进行开发的   2. 他是基于HTTP 协议进行开发 ...

  3. ceph问题

    问题1: [root@admin-node my-cluster]# ceph -s cluster 4ca35731-2ccf-47fb-9f06-41fae858626d health HEALT ...

  4. used in key specification without a key length

    官方的解释: The error happens because MySQL can index only the first N chars of a BLOB or TEXT column. So ...

  5. java8数组

    public class jh_01_为什么需要数组 { public static void main(String[] args) { int [] arr = new int[5]; // in ...

  6. 用pyinstaller打包时的图标问题

    前言 因为昨天重新研究了下python的打包方法,今天一番准备把之前写的一个pdf合并软件重新整理一下,打包出来. 但在打包的过程中仍然遇到了一些问题,半年前一番做打包的时候也遇到了一些问题,现在来看 ...

  7. webpack chunkFilename 非入口文件的命名规则 [转]

    官网的文档只理解了filename是主入口的文件名,chunkFilename是非主入口的文件名 filename应该比较好理解,就是对应于entry里面生成出来的文件名.比如: { entry: { ...

  8. 某oa系统的审计

    title: 某oa系统的审计 date: 2018-03-07 17:18:16 tags: --- 信呼OA 闲着没事,java学累了来整理下以前审的一个觉得很有意思的cms,这个作者写的比较灵活 ...

  9. vue路由核心要点(vue-router)

    目录 目录 1.vue-router 是什么? 2.如何使用v-router? 3.vue-router跳转和传参 4.vue-router实现的原理 两种模式 5.vue-router 有哪几种导航 ...

  10. React之深入了解虚拟DOM

    JS在手机中也可运行,React Native通过将虚拟DOM转换为底层的原生组件,即可在手机端运行,在浏览器运行时,只需要将虚拟DOM转换为真实DOM即可运行,虚拟DOM就是将真实DOM转换为JS对 ...