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

时间: 2025-01-21 10:16:19

Spring Boot应用的打包和部署的相关文章

Spring Boot的快速启动和部署

关于Spring Boot 这是官网描述的特点: 1.Create stand-alone Spring applications 创建独立的Spring应用 2.Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)内嵌了Tomcat,Jetty或者Undertow,并且不需要部署 3.Provide opinionated 'starter' POMs to simplify your Maven conf

《Spring Boot Cookbook》阅读笔记

声明1:该系列教程已经在极客学院上线:spring-boot cookbook 声明2:本博客文章需征得作者同意后方可转载 作为后端开发,Spring Boot值得拥有 从技术雷达 : 关于技术趋势的分析报告和Profile of successful Java developer in 2016这两篇文章中都可以看出,作为Java开发人员,Spring Boot已经成为你不得不尽快补充的一项技能. 最近一个月一直在学习Spring Boot框架,在阅读<Spring Boot Cookbook

spring boot应用启动原理分析

spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过spring boot可以通过下面的demo来感受下. 下面以这个工程为例,演示如何启动Spring boot项目: git clone git@github.com:hengyunabc/spring-boot-demo.git mvn spring-boot

5.25. Spring boot with Git version

Spring boot 每次升级打包发给运维操作,常常运维操作不当致使升级失败,开发怎样确认线上的jar/war包与升级包一致呢? 请看下面的解决方案 5.25.1. CommonRestController 公共控制器 所有 RestController将会集成 CommonRestController package cn.netkiller.api.rest; import org.springframework.http.HttpStatus; import org.springfram

2.25. Spring boot with Git version

Spring boot 每次升级打包发给运维操作,常常运维操作不当致使升级失败,开发怎样确认线上的jar/war包与升级包一致呢? 请看下面的解决方案 2.25.1. CommonRestController 公共控制器 所有 RestController将会集成 CommonRestController package cn.netkiller.api.rest; import org.springframework.http.HttpStatus; import org.springfram

springboot(十六):使用Jenkins部署Spring Boot

jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第三步,Push SSH 第四步,部署项目 第一步 ,jenkins安装 准备环境: JDK:1.8 Jenkins:2.83 Centos:7.3 maven 3.5' jdk默认已经安装完成 配置maven 版本要求maven3.5.0 软件下载 wget http://mirror.bit.ed

【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到

 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于编译jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<

将Spring Boot程序打包成docker镜像-超简版

将Dockerfile和你的spring boot编译好的jar放在一个目录底下   Dockerfile: Java代码   FROM ingensi/oracle-jdk:centos6-7u65      MAINTAINER wiselyman      ADD platform-0.0.1-SNAPSHOT.jar /app/      WORKDIR /app/      EXPOSE  8888      CMD ["java","-jar",&quo

将Spring Boot程序打包成docker镜像

写了这多关于平台云的文章,其实我的平台云还没有搭建起来,但是我最终的目标是将spring boot运行于平台云当中.   我所知道我目前要学习的东西有CoreOS+Docker--这是平台云的基石.后面打算部署Deis或者flynn作为平台云.   不管怎么说,spring boot应用最终作为一种微服务运行于docker容器之中的.最后负载均衡也好,数据库也好,都是让平台云去做.   1.写一个简单的spring boot的例子. 使用STS新建一个spring boot项目,添加一点代码(其