Spring Boot应用的打包和部署

现在的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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【答疑解惑】Android sdk ndk source的区别

SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发...

34870
来自专栏跟着阿笨一起玩NET

C#远程调用技术WebService修炼手册

3.1、Webservice是如何实现远程调用?三要素在webservice的作用?

16120
来自专栏史上最简单的Spring Cloud教程

我是如何根据豆瓣api来理解Restful API设计的

1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思。它是在Roy Fielding博士论文首次...

27850
来自专栏java架构学习交流

java web方面的面试问题,Spring MVC方面的面试问题,摘自java web轻量级开发面试教程

下面列出Spring Web方面的常见问题,除此之外,大家也可以自己不断收集,不断提升。 问题1,你们的项目是如何搭建Spring Web框架的,具体而言,如何...

22980
来自专栏Java帮帮-微信公众号-技术文章全总结

Java和PHP在Web开发方面的比较

比较PHP和JSP这两个Web开发技术,在目前的情况是其实是比较PHP和Java的Web开发。以下是我就几个主要方面进行的比较: 一、 语言比较   PHP是...

50840
来自专栏Java架构

Facebook顶级架构师教你怎么使用Java来搭建微服务

微服务背后的大理念是将大型、复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化。本文主要介绍了利用 Java 生态系统构建微服务的多...

400100
来自专栏Java架构

Facebook顶级架构师教你怎么使用Java来搭建微服务快速预览介绍$java -jar myservice.jarSelf-containedSpring BootWildfly SwarmIn-

27390
来自专栏Java职业技术分享

阿里P8架构师谈:什么是缓存雪崩?服务器雪崩的场景与解决方案

分布式系统都存在这样一个问题,由于网络的不稳定性,决定了任何一个服务的可用性都不是 100% 的。当网络不稳定的时候,作为服务的提供者,自身可能会被拖死,导致服...

41500
来自专栏我就是马云飞

Gradle 提速:每天为你省下一杯喝咖啡的时间

作为一名 Android 开发同学,当你的工程和代码达到一定规模的时候,相信你一定遇到过编译速度过慢的问题。比如:

14130
来自专栏芋道源码1024

IntelliJ IDEA 内存优化最佳实践

【编者按】本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响。

47470

扫码关注云+社区

领取腾讯云代金券