Spring Boot应用的打包和部署

字数639 阅读2308 评论0 喜欢5

现在的IT开发,DevOps渐渐获得技术管理人员支持、云计算从ECS转向Docker容器技术、微服务的概念和讨论也越来越热,以上这些研究方面,最终都聚焦于软件的打包、分发和部署上。

[Twelve-Factor App]开发方法这一系列的博文主要讲述了一个现代的SaaS应用是如何被构建和部署的,其中一个关键的原则是:分离配置定义和应用程序。

DevOps开发模型要求开发人员管理应用程序的开发、测试、打包和部署等所有流程,当然,必须确保这些步骤的执行足够简单和可控,否则开发人员都没有时间维护软件和开发新功能了。要实现DevOps模型,需要简洁、隔离的应用程序包,这种应用程序自带运行容器、可以当做进程一样一键运行,并且不需要重新构建就部署到不同的机器上。

一、创建基于Spring Boot框架的可执行Jar包

Spring Boot开发的应用可以打包为单独的JAR包,然后通过java -jar <name>.jar命令运行。接下来我们基于之前练习使用的应用程序,看看如何构建Spring Boot Uber JAR。

Note:Uber JAR是将应用程序打包到单独的jar包中,该jar包包含了应用程序依赖的所有库和二进制包。

How Do

  • 通过mvn clean package命令打包应用程序
  • 通过命令java -jar target/bookpub-0.0.1-SNAPSHOT.jar运行程序

    运行Jar启动Java web应用

分析

如上所示,打包成可执行的jar包这种方法相当直观,背后的工作由spring-boot-maven-plugin插件实现:先通过maven-shade-plugin生成一个包含依赖的jar,再通过spring-boot-maven-plugin插件把spring boot loader相关的类,还有MANIFEST.MF打包到jar里。关于Spring Boot的启动原理分析,详见spring boot应用启动原理分析一文。

总结下Spring Boot应用的启动流程:(1)spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖的jar包,还有Spring boot loader相关的类;(2)Fat jar的启动Main函数是JarLauncher,它负责创建一个LaunchedURLClassLoader来加载/lib下面的jar,并以一个新线程启动应用的Main函数。

二、创建Docker镜像

可以参考我之前写的一篇文章:Docker with Spring Boot

spring boot 部署 发布的更多相关文章

  1. Spring Boot工程发布到Docker

    先聊聊闲话 搞过企业级的application运维的同仁肯定深有感触,每个application的功能交叉错杂,数据交换就让人焦头烂额(当然这和顶层业务设计有关系), 几十个application发布 ...

  2. spring boot项目发布tomcat容器(包含发布到tomcat6的方法)

    spring boot因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将spring boot项目打包成可发布到tomcat中的war包项目呢? 1. 既然需要打包成wa ...

  3. spring boot 部署为jar

    前言 一直在ide中敲代码,使用命令行mvn spring-boot:run或者gradlew bootRun来运行spring boot项目.想来放到prod上面也应该很简单.然而今天试了下,各种问 ...

  4. Spring Boot部署方法

    Spring Boot部署方法     网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...

  5. spring boot 部署到tomcat

    网上很多文章描述过,当我按步骤做时会抛各种错误,最后记录下我的做法(成功发布到本地 Tomcat9 ): 1.将项目的启动类Application.java继承SpringBootServletIni ...

  6. Spring Boot 部署与服务配置

    Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项 ...

  7. 十六、Spring Boot 部署与服务配置

    spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项 ...

  8. spring boot部署系统--morphling简介

    Morphling 简介 Morphling是一套基于Spring Boot 1.5开发的部署系统,依赖简单,一套Mysql即可运行,操作简单明了,适用于百台规模几下机器的运维操作 功能概述 系统部署 ...

  9. spring boot 部署

    指定运行的内存 java -Xms10m -Xmx200m -jar xxx.jar spring boot 打包成war包: 让 SpringbootApplication 类继承 SpringBo ...

随机推荐

  1. Office 顿号怎么输

    中文状态下回车上面一个按键就是  

  2. Linux包括hash_map和hash_set的not declared问题

    当在Linux下cpp文件包括hash_map或hash_set时.会出现"'hash_map' was not declared in this scope"问题. #inclu ...

  3. vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页

    设置代理,避免出现跨域问题 /*设置代理,避免出现跨域问题*/ proxyTable: { '/api':{ target: 'https://www.oschina.net/action/apiv2 ...

  4. 建立第一个Sencha Touch应用

    准备 开始开发前,请先到下面的地址下载Sencha Touch 2的包:http://www.sencha.com/products/touch/download/ .下载完解压后你会发现包里有很多文 ...

  5. XSS过滤

    XSS过滤封装用法 封装到app01/form.py文件中进行验证 from django.forms import Form,widgets,fields class ArticleForm(For ...

  6. python 调用函数时使用星号 *, **

    python 调用函数时使用星号 *, ** 调用函数时使用星号 * 或 ** test(*args):* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去.如果 args 等于 (1 ...

  7. ruby on rails模拟HTTP请求错误发生:end of file reached

    在文章 Ruby On Rails中REST API使用演示样例--基于云平台+云服务打造自己的在线翻译工具 中,利用ruby的Net::HTTP发起http请求訪问IBM Bluemix上的sour ...

  8. AppStore审核--17.5

    本文转载至 http://blog.csdn.net/addychen/article/details/39672185 感谢原文作者分享 AppStore审核 为了确保用户理解应用如何使用他们的数据 ...

  9. 【BZOJ2400】Spoj 839 Optimal Marks 最小割

    [BZOJ2400]Spoj 839 Optimal Marks Description 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. ...

  10. 【BZOJ3252】攻略 DFS序+线段树(模拟费用流)

    [BZOJ3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛> ...