🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## SpringBoot应用的部署方式 应用程序的部署方式是一个重要的环节。部署方式的选择,影响这节省运维人员工作量,决定着是否可以自动化部署。 SpringBoot设计的目的之一就包含了快速部署这个优点。下面就来对比下各种部署方案的优缺点。 打包部署方案总共分为以下几点 * 常规部署 * 封装部署 * 热部署 * Docker环境部署 其中热部署是在其它部署的基础上的实现。 ## 一、常规部署 ------ 所谓常规部署是指和普通应用程序部署方式一样,采用以下类似目录结构部署。 ``` app/ ============================ 应用程序根目录 |--- startup.sh =============== 启动脚本 |--- lib ======================= 依赖第三方jar | |--- spring-beans-4.3.2.RELEASE.jar | |--- jedis-2.9.0.jar | |... ======================== 其它jar |--- conf ======================= 配置文件路劲 |--- ..... ====================== 其它需要目录 ``` 这种部署方式实现基于maven提供的打包插件。使用配置如下: ```xml <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>timestamp-property</id> <goals> <goal>timestamp-property</goal> </goals> <configuration> <name>current.time</name> <pattern>yyyyMMddHHmmss</pattern> <timeZone>GMT+8</timeZone> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> </configuration> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/lib</outputDirectory> <excludeTransitive>false</excludeTransitive> <stripVersion>false</stripVersion> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <encoding>UTF-8</encoding> <outputDirectory>${project.build.directory}/conf</outputDirectory> <resources> <resource> <directory>src/main/resources/</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> <execution> <id>copy-command</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <encoding>UTF-8</encoding> <outputDirectory>${project.build.directory}</outputDirectory> <resources> <resource> <directory>src/main/resources/</directory> <filtering>true</filtering> </resource> </resources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <finalName>${project.artifactId}-${current.time}</finalName> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>${start-class}</mainClass> </manifest> <manifestEntries> <Class-Path>. lib/ config/</Class-Path> </manifestEntries> </archive> <includes> <include>mybatis/**</include> <include>com/**</include> <include>META-INF/*</include> </includes> </configuration> </plugin> ``` 这种部署方式是最传统的方式。对于应用程序,如果有需要修改的配置在程序的某个目录下,当然可以很方便的修改。但同时这也不利于自动化部署,每个应用程序都有自己的多个目录,可修改配置文件分离在这些目录中。更好的方案应该是可修改的配置与程序分离。 ## 二、封装部 署 ------ spring boot官方提供了maven打包插件(spring-boot-maven-plugin),可以将程序相关依赖jar、无需修改的配置打成一个jar包。 使用方式如下: * 如果pom是继承自spring-boot-starter-parent,只需要下面的指定: ```xml <properties> <!-- The main class to start by executing java -jar --> <start-class>com.mycorp.starter.HelloWorldApplication</start-class> </properties> ``` * 如果pom不是继承spring-boot-starter-parent,需要下面的指定。 ``` <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.5.RELEASE</version> <configuration> <mainClass>${start-class}</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> ``` from:[Spring Boot Maven Plugin](https://docs.spring.io/spring-boot/docs/current/maven-plugin/usage.html) 这种方式的缺点就是每次打的包是一个很大的jar,如果服务器网络带宽较小,每次更新都会比较耗时。 ## 三、热部署 ------ [Spring Boot热部署—SpringBoot + Devtools](http://blog.csdn.net/qq_23212697/article/details/54629051) ## 四、Docker环境部署 ------ [使用docker-maven-plugin插件实现Docker构建并提交到私有仓库](http://www.jianshu.com/p/c435ea4c0cc0)