免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

使用Springboot怎么打包部署應(yīng)用

今天就跟大家聊聊有關(guān)使用Spring boot怎么打包部署應(yīng)用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)潁上,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18982081108

1、Spring Boot內(nèi)置web

Spring Boot 其默認(rèn)是集成web容器的,啟動(dòng)方式由像普通Java程序一樣,main函數(shù)入口啟動(dòng)。其內(nèi)置Tomcat容器或Jetty容器,具體由配置來(lái)決定(默認(rèn)Tomcat)。當(dāng)然你也可以將項(xiàng)目打包成war包,放到獨(dú)立的web容器中(Tomcat、weblogic等等),當(dāng)然在此之前你要對(duì)程序入口做簡(jiǎn)單調(diào)整。

對(duì)server的幾個(gè)常用的配置做個(gè)簡(jiǎn)單說(shuō)明:

# 項(xiàng)目contextPath,一般在正式發(fā)布版本中,我們不配置 
server.context-path=/myspringboot 
# 錯(cuò)誤頁(yè),指定發(fā)生錯(cuò)誤時(shí),跳轉(zhuǎn)的URL。請(qǐng)查看BasicErrorController源碼便知 
server.error.path=/error 
# 服務(wù)端口 
server.port=9090 
# session最大超時(shí)時(shí)間(分鐘),默認(rèn)為30 
server.session-timeout=60 
# 該服務(wù)綁定IP地址,啟動(dòng)服務(wù)器時(shí)如本機(jī)不是該IP地址則拋出異常啟動(dòng)失敗,只有特殊需求的情況下才配置 
# server.address=192.168.16.11

Tomcat

Tomcat為Spring Boot的默認(rèn)容器,下面是幾個(gè)常用配置:

pom.xml依賴(lài)配置:

  <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--<scope>provided</scope>-->
</dependency>
# tomcat最大線(xiàn)程數(shù),默認(rèn)為200 
server.tomcat.max-threads=800 
# tomcat的URI編碼 
server.tomcat.uri-encoding=UTF-8 
# 存放Tomcat的日志、Dump等文件的臨時(shí)文件夾,默認(rèn)為系統(tǒng)的tmp文件夾(如:C:\Users\Shanhy\AppData\Local\Temp) 
server.tomcat.basedir=H:/springboot-tomcat-tmp 
# 打開(kāi)Tomcat的Access日志,并可以設(shè)置日志格式的方法: 
#server.tomcat.access-log-enabled=true 
#server.tomcat.access-log-pattern= 
# accesslog目錄,默認(rèn)在basedir/logs 
#server.tomcat.accesslog.directory= 
# 日志文件目錄 
logging.path=H:/springboot-tomcat-tmp 
# 日志文件名稱(chēng),默認(rèn)為spring.log 
logging.file=myapp.log

Jetty

如果你要選擇Jetty,也非常簡(jiǎn)單,就是把pom中的tomcat依賴(lài)排除,并加入Jetty容器的依賴(lài),如下:

<dependencies> 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-web</artifactId> 
 <exclusions> 
  <exclusion> 
  <groupId>org.springframework.boot</groupId> 
  <artifactId>spring-boot-starter-tomcat</artifactId> 
  </exclusion> 
 </exclusions> 
 </dependency> 
 <dependency> 
 <groupId>org.springframework.boot</groupId> 
 <artifactId>spring-boot-starter-jetty</artifactId> 
 </dependency> 
<dependencies>

項(xiàng)目構(gòu)建我們使用Maven或Gradle,這將使項(xiàng)目依賴(lài)、jar包管理、以及打包部署變的非常方便。

2、Maven構(gòu)建Spring Boot框架的可執(zhí)行Jar包

在spring boot里,很吸引人的一個(gè)特性是可以直接把應(yīng)用打包成為一個(gè)jar/war,然后這個(gè)jar/war是可以直接啟動(dòng)的,不需要另外配置一個(gè)Web Server。單獨(dú)的JAR包,然后通過(guò)java -jar <name>.jar命令運(yùn)行。

1.1 Maven

SpringBootMaven插件為Maven提供SpringBoot支持,它允許你打包可執(zhí)行jar或war存檔,然后就地運(yùn)行應(yīng)用。為了使用
它,你需要使用Maven 3.2(或更高版本)。

Maven用戶(hù)可以繼承spring-boot-starter-parent項(xiàng)目來(lái)獲取合適的默認(rèn)設(shè)置。該父項(xiàng)目提供以下特性:
1、默認(rèn)編譯級(jí)別為Java 1.6
2、源碼編碼為UTF-8
3、一個(gè)依賴(lài)管理節(jié)點(diǎn),允許你省略普通依賴(lài)的 <version>標(biāo)簽,繼承自 spring-boot-dependenciesPOM。
4、合適的插件配置(exec插件,surefire,Git commitID,shade)
5、針對(duì) application.properties和application.yml 的資源過(guò)濾
6、最后一點(diǎn):由于默認(rèn)配置文件接收Spring風(fēng)格的占位符( ${...} ),Maven  filtering改用@..@ 占位符(你可以使用Maven屬性 resource.delimiter來(lái)覆蓋它)。

1.2繼承starter parent

想配置你的項(xiàng)目繼承  spring-boot-starter-parent 只需要簡(jiǎn)單地設(shè)置parent為:

<!-- Inherit defaults from Spring Boot --> 
<parent> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-parent</artifactId> 
<version>1.3.0.BUILD-SNAPSHOT</version> 
</parent>

注:你應(yīng)該只需要在該依賴(lài)上指定Spring Boot版本。如他的starters,你可以放心的省略版本號(hào)。

1.3使用沒(méi)有父POM的SpringBoot

不是每個(gè)人都喜歡繼承spring-boot-starter-parentPOM。你可能需要使用公司標(biāo)準(zhǔn)parent,或你可能傾向于顯式聲明所有
Maven配置。

如果你不使用 spring-boot-starter-parent ,通過(guò)使用一個(gè)scope=import 的依賴(lài),你仍能獲取到依賴(lài)管理的好處:

<dependencyManagement> 
<dependencies> 
<dependency> 
<!-- Import dependency management from Spring Boot --> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-dependencies</artifactId> 
<version>1.3.0.BUILD-SNAPSHOT</version> 
<type>pom</type> 
<scope>import</scope> 
</dependency> 
</dependencies> 
</dependencyManagement>

1.4改變Java版本

spring-boot-starter-parent選擇相當(dāng)保守的Java兼容策略。如果你遵循我們的建議,使用最新的Java版本,你可以添加一
個(gè) java.version屬性:

<properties>
<java.version>1.8</java.version>
</properties>

1.5 使用Spring Boot Maven插件

SpringBoot包含一個(gè)Maven插件,它可以將項(xiàng)目打包成一個(gè)可執(zhí)行jar。如果想使用它,你可以將該插件添加到<plugins>節(jié)
點(diǎn)處:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<!-- ... --> 
<build> 
<plugins> 
<plugin> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-maven-plugin</artifactId> 
<version>1.3.0.BUILD-SNAPSHOT</version> 
<executions> 
<execution> 
<goals> 
<goal>repackage</goal> 
</goals> 
</execution> 
</executions> 
</plugin> 
</plugins> 
</build> 
</project>

注:如果使用Spring-Boot-tarter-parent pom,你只需要添加該插件而無(wú)需配置它,除非你想改變定義在partent中的設(shè)置。

該配置會(huì)在Maven生命周期的 package階段重新打包一個(gè)jar或war。下面的示例顯示在target目錄下既有重新打包后的jar,
也有原始的jar:

1.6 linux下打包方法:

使用 mvn clean package 命令打包

如果還沒(méi)有安裝maven :

yum -y install apache-maven

或者單獨(dú)下載安裝:

wget http://apache.fayea.com/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar zxvf apache-maven-3.3.9-bin.tar.gz

設(shè)置環(huán)境變量:

MVN_HOME=/usr/local/app/apache-maven-3.3.9
export PATH=$PATH:$MVN_HOME/bin

然后可以使用以下命令編譯:

mvn clean package

可以追加參數(shù) -Dmaven.test.skip=true 跳過(guò)測(cè)試。

$mvn package 
$ls target/*.ja

target/myproject-1.0.0.jartarget/myproject-1.0.0.jar.original

1.6 使用Eclipse下打包方法:

打開(kāi)maven插件的maven package,就可以打包了:

使用Spring boot怎么打包部署應(yīng)用

打包出來(lái)的文件:

使用Spring boot怎么打包部署應(yīng)用

如果不包含像上面那樣的<execution/>,你可以自己運(yùn)行該插件(但只有在package目標(biāo)也被使用的情況)。例如:

$ mvn package spring-boot:repackage 
$ ls target/*.jar

target/myproject-1.0.0.jar target/myproject-1.0.0.jar.original

如果使用一個(gè)里程碑或快照版本,你還需要添加正確的pluginRepository元素:

<pluginRepositories> 
<pluginRepository> 
<id>spring-snapshots</id> 
<url>http://repo.spring.io/snapshot</url> 
</pluginRepository> 
<pluginRepository> 
<id>spring-milestones</id> 
<url>http://repo.spring.io/milestone</url> 
</pluginRepository> 
</pluginRepositories>

打包可執(zhí)行jar和war文件

一旦spring-boot-maven-plugin被包含到你的pom.xml中,它就會(huì)自動(dòng)嘗試使用spring-boot:repackage目標(biāo)重寫(xiě)存檔以使它們能夠執(zhí)行。為了構(gòu)建一個(gè)jar或war,你應(yīng)該使用常規(guī)的packaging元素配置你的項(xiàng)目:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<!-- ... --> 
<packaging>jar</packaging> 
<!-- ... --> 
</project>

生成的存檔在 package 階段會(huì)被SpringBoot增強(qiáng)。你想啟動(dòng)的main類(lèi)即可以通過(guò)指定一個(gè)配置選項(xiàng),也可以通過(guò)為manifest添加一個(gè)Main-Class屬性這種常規(guī)的方式實(shí)現(xiàn)。如果你沒(méi)有指定一個(gè)main類(lèi),該插件會(huì)搜索帶有publicstaticvoidmain(String[]args)方法的類(lèi)。

為了構(gòu)建和運(yùn)行一個(gè)項(xiàng)目的artifact,你可以輸入以下命令:

$ mvn package 
$ java -jar target/spring-boot01-1.0-SNAPSHOT.jar

這種方式,只要控制臺(tái)關(guān)閉,服務(wù)就不能訪(fǎng)問(wèn)了。下面我們使得 jar 包在后臺(tái)運(yùn)行:
java -jar spring-boot01-1.0-SNAPSHOT.jar > log.file 2>&1 &

為了構(gòu)建一個(gè)即是可執(zhí)行的,又能部署到一個(gè)外部容器的war文件,你需要標(biāo)記內(nèi)嵌容器依賴(lài)為"provided",例如:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<!-- ... --> 
<packaging>war</packaging> 
<!-- ... --> 
<dependencies> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-web</artifactId> 
</dependency> 
<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-tomcat</artifactId> 
<scope>provided</scope> 
</dependency> 
<!-- ... --> 
</dependencies> 
</project>

4、打包為單個(gè)jar時(shí),spring boot的啟動(dòng)方式

maven打包之后,會(huì)生成兩個(gè)jar文件:

  1. demo-0.0.1-SNAPSHOT.jar

  2. demo-0.0.1-SNAPSHOT.jar.original

其中demo-0.0.1-SNAPSHOT.jar.original是默認(rèn)的maven-jar-plugin生成的包。

demo-0.0.1-SNAPSHOT.jar是spring boot maven插件生成的jar包,里面包含了應(yīng)用的依賴(lài),以及spring boot相關(guān)的類(lèi)。下面稱(chēng)之為fat jar。

先來(lái)查看spring boot打好的包的目錄結(jié)構(gòu)(不重要的省略掉):

├── META-INF 
│  ├── MANIFEST.MF 
├── application.properties 
├── com 
│  └── example 
│    └── SpringBootDemoApplication.class 
├── lib 
│  ├── aopalliance-1.0.jar 
│  ├── spring-beans-4.2.3.RELEASE.jar 
│  ├── ... 
└── org 
  └── springframework 
    └── boot 
      └── loader 
        ├── ExecutableArchiveLauncher.class 
        ├── JarLauncher.class 
        ├── JavaAgentDetector.class 
        ├── LaunchedURLClassLoader.class 
        ├── Launcher.class 
        ├── MainMethodRunner.class 
        ├── ...

依次來(lái)看下這些內(nèi)容。

MANIFEST.MF

Manifest-Version: 1.0 
Start-Class: com.example.SpringBootDemoApplication 
Implementation-Vendor-Id: com.example 
Spring-Boot-Version: 1.3.0.RELEASE 
Created-By: Apache Maven 3.3.3 
Build-Jdk: 1.8.0_60 
Implementation-Vendor: Pivotal Software, Inc. 
Main-Class: org.springframework.boot.loader.JarLauncher

可以看到有Main-Class是org.springframework.boot.loader.JarLauncher ,這個(gè)是jar啟動(dòng)的Main函數(shù)。

還有一個(gè)Start-Class是com.example.SpringBootDemoApplication,這個(gè)是我們應(yīng)用自己的Main函數(shù)

@SpringBootApplication 
public class SpringBootDemoApplication { 
 
  public static void main(String[] args) { 
    SpringApplication.run(SpringBootDemoApplication.class, args); 
  } 
}

com/example 目錄

這下面放的是應(yīng)用的.class文件。

lib目錄

這里存放的是應(yīng)用的Maven依賴(lài)的jar包文件。

比如spring-beans,spring-mvc等jar。

org/springframework/boot/loader 目錄

這下面存放的是Spring boot loader的.class文件。

啟動(dòng):

我們直接啟動(dòng):java -jar demo-0.0.1-SNAPSHOT.jar

5、Maven添加本地Jar包

我們有時(shí)候項(xiàng)目依賴(lài)外部的jar,我們使用Eclipse開(kāi)發(fā)的時(shí)候我們直接通過(guò)build path添加jar就可以,但是使用mvn 打包的時(shí)候就會(huì)缺少這個(gè)包。

1. 使用system scope

我們直接引入rabbitmq-client.jar。這個(gè)方式比較靈活,到新的服務(wù)器上,無(wú)需做額外的操作。

<dependency> 
    <groupId>rabbitmq.client</groupId>  
    <artifactId>rabbitmq.client</artifactId>  
    <version>3.0</version>  
    <scope>system</scope>  
    <systemPath>${basedir}/src/main/WEB-INF/lib/rabbitmq-client.jar</systemPath>  
  </dependency>

1、groupId和artifactId以及version都是可以隨便填寫(xiě)的 ,scope必須填寫(xiě)為system,而systemPath我們現(xiàn)在我們jar包的目錄地址就可以了

2、${basedir}就是項(xiàng)目根目錄

2. 將jar包安裝到本地repository中

這個(gè)需要在新機(jī)器上執(zhí)行mvn install:install-file命令。

mvn install:install-file 
-Dfile= jar文件所存放的地址   
-DgroupId= jar文件所屬的group:包名  
-DartifactId= jar的項(xiàng)目名 名稱(chēng),一般就是去掉后綴的文件名   
-Dversion=版本號(hào) 
-Dpackaging=jar:此包的打包形式,就是jar 
-DgeneratePom=true

例如執(zhí)行命令:

復(fù)制代碼 代碼如下:


mvn install:install-file -Dfile=D:\JAR_LIB\rabbitmq-client.jar -DgroupId=com.rabbitmq -DartifactId=client -Dversion=3.5.0 -Dpackaging=jar  -DgeneratePom=true -DcreateChecksum=true

在項(xiàng)目中引用:

<dependency> 
  <groupId>com.rabbitmq</groupId> 
  <artifactId>client</artifactId> 
  <version>3.5.0</version> 
</dependency>

3、添加 in project repository

設(shè)置項(xiàng)目的庫(kù)目錄

<repository>

  <id>in-project</id>

  <name>In Project Repo</name>

  <url>file://${project.basedir}/lib</url>

</repository>

添加依賴(lài):

<dependency>

  <groupId>com.rabbitmq</groupId>

  <artifactId>client</artifactId>

  <version>3.5.0</version>

</dependency>

jar包及路徑必須嚴(yán)格遵循格式:

/groupId/artifactId/version/artifactId-verion.jar

本例中: lib/com/rabbitmq/client/3.5.0/rabbitmq-client-3.5.0.jar

6、部署到j(luò)avaEE容器

修改啟動(dòng)類(lèi),繼承 SpringBootServletInitializer 并重寫(xiě) configure 方法

public class SpringBootSampleApplication extends SpringBootServletInitializer{ 
 
  private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class); 
 
  @Override 
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
    return builder.sources(this.getClass()); 
  } 
 
}

修改pom文件中jar 為 war

<!-- <packaging>jar</packaging> --> 
<packaging>war</packaging>

修改pom,排除tomcat插件

<dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
      <exclusions> 
        <exclusion> 
          <groupId>org.springframework.boot</groupId> 
          <artifactId>spring-boot-starter-tomcat</artifactId> 
        </exclusion> 
      </exclusions> 
    </dependency>

打包部署到容器

7、熱部署

在我們開(kāi)發(fā)過(guò)程中,我們需要經(jīng)常修改,為了避免重復(fù)啟動(dòng)項(xiàng)目,我們可以啟用熱部署。

Spring-Loaded項(xiàng)目提供了強(qiáng)大的熱部署功能,添加/刪除/修改 方法/字段/接口/枚舉 等代碼的時(shí)候都可以熱部署,速度很快,很方便。

想在Spring Boot中使用該功能非常簡(jiǎn)單,就是在spring-boot-maven-plugin插件下面添加依賴(lài):

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>springloaded</artifactId>
    <version>1.2.5.RELEASE</version>
  </dependency>
</dependencies>

添加以后,通過(guò)mvn spring-boot:run啟動(dòng)就支持熱部署了。

注意:使用熱部署的時(shí)候,需要IDE編譯類(lèi)后才能生效,你可以打開(kāi)自動(dòng)編譯功能,這樣在你保存修改的時(shí)候,類(lèi)就自動(dòng)重新加載了。

8、使用Profile區(qū)分環(huán)境

application.properties區(qū)分環(huán)境

spring boot 可以在 “配置文件”、“Java代碼類(lèi)”、“日志配置” 中來(lái)配置profile區(qū)分不同環(huán)境執(zhí)行不同的結(jié)果

1、配置文件

使用配置文件application.yml 和 application.properties 有所區(qū)別

以application.properties 為例,通過(guò)文件名來(lái)區(qū)分環(huán)境 application-{profile}.properties

application.properties

app.name=MyApp
server.port=8080
spring.profiles.active=dev
application-dev.properties

server.port=8081
application-stg.properties

server.port=8082

在啟動(dòng)程序的時(shí)候通過(guò)添加 –spring.profiles.active={profile} 來(lái)指定具體使用的配置

例如我們執(zhí)行 java -jar demo.jar –spring.profiles.active=dev 那么上面3個(gè)文件中的內(nèi)容將被如何應(yīng)用?

Spring Boot 會(huì)先加載默認(rèn)的配置文件,然后使用具體指定的profile中的配置去覆蓋默認(rèn)配置。

app.name 只存在于默認(rèn)配置文件 application.properties 中,因?yàn)橹付ōh(huán)境中不存在同樣的配置,所以該值不會(huì)被覆蓋

server.port 默認(rèn)為8080,但是我們指定了環(huán)境后,將會(huì)被覆蓋。如果指定stg環(huán)境,server.port 則為 8082

spring.profiles.active 默認(rèn)指定dev環(huán)境,如果我們?cè)谶\(yùn)行時(shí)指定 –spring.profiles.active=stg 那么將應(yīng)用stg環(huán)境,最終 server.port 的值為8082

Maven環(huán)境配置

項(xiàng)目工程統(tǒng)一使用maven的profile插件定義不同的項(xiàng)目構(gòu)建環(huán)境(dev, alpha, beta, prod),通過(guò)filter插件為不同環(huán)境下的配置項(xiàng)注入對(duì)應(yīng)的參數(shù)值來(lái)實(shí)現(xiàn)動(dòng)態(tài)配置目標(biāo)。

2定義profile

在POM.xml中配置四個(gè)profile,對(duì)應(yīng)項(xiàng)目所處的四個(gè)不同的環(huán)境-dev, alpha, beta, prod, profile的id屬性即為每個(gè)環(huán)境賦予一個(gè)唯一的標(biāo)示,元素的內(nèi)容則是以key-value的形式出現(xiàn)的鍵值對(duì),如我們定義了一個(gè)變量,其值在不同的環(huán)境下(不同id)被賦予了不同的值(dev, test, pre-prod, prod),要激活不同的環(huán)境打包,我們可以在命令行通過(guò)mvn package –P${profileId}來(lái)讓其運(yùn)行,為了開(kāi)發(fā)便利,默認(rèn)激活的是dev開(kāi)發(fā)環(huán)境,即開(kāi)發(fā)人員不需要通過(guò)命令行手動(dòng)輸入-p參數(shù)也能運(yùn)行dev環(huán)境的打包。

 <profile>
      <!-- 本地參數(shù) -->
      <id>dev</id>
      <properties>
<server.port>8081</server.port>
<server.address>0.0.0.0</server.address>
<profileActive>dev</profileActive>
      </properties>
<build>
<filters>
<filter>
<groupId>${basedir}/src/main/resources/dev.properties</groupId>
</filter>
 </profile>

9、創(chuàng)建一個(gè)Linux 應(yīng)用的sh腳本

下面幾個(gè)腳本僅供參考:

打包:clean.sh

#0、check user 
TIME_STAMP=`date +%Y%m%d%H%M` 
WHO=`whoami` 
if [ "$WHO" != 'www' ]; then 
    echo 'current user is not www' 
    echo 'exit' 
    exit 
fi 
CODE_HOME=/home/www/app 
PROJECTNAME=qrealtime 
cd $CODE_HOME/$PROJECTNAME 
git pull 
mvn clean package 
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}' `  
if [ $pid != "" ]; then 
    echo "App is running and pid=$pid" 
else 
    echo "App is not running." 
fi

start.sh

#0、check user 
TIME_STAMP=`date +%Y%m%d%H%M` 
WHO=`whoami` 
if [ "$WHO" != 'www' ]; then 
   echo 'current user is not www' 
   echo 'exit' 
   exit 
fi 
CODE_HOME=/home/www/app 
PROJECTNAME=qrealtime 
cd $CODE_HOME/$PROJECTNAME 
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}'`  
if [ $pid ]; then 
  echo "App is running and pid=$pid" 
else 
  nohup java -jar $CODE_HOME/$PROJECTNAME/target/$<span >PROJECTNAME</span><span >-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &</span> 
fi

stop.sh

#0、check user 
TIME_STAMP=`date +%Y%m%d%H%M` 
WHO=`whoami` 
if [ "$WHO" != 'www' ]; then 
    echo 'current user is not www' 
    echo 'exit' 
    exit 
fi 
CODE_HOME=/home/www/app 
PROJECTNAME=qrealtime 
cd $CODE_HOME/$PROJECTNAME 
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}' `  
if [ $pid ]; then 
  echo "App is running and pid=$pid" 
  kill -9 $pid 
  if [[ $? -eq 0 ]];then  
    echo "sucess to stop $PROJECTNAME "  
  else  
    echo "fail to stop $PROJECTNAME " 
   fi 
fi

restart

#0、check user 
TIME_STAMP=`date +%Y%m%d%H%M` 
WHO=`whoami` 
if [ "$WHO" != 'www' ]; then 
    echo 'current user is not www' 
    echo 'exit' 
    exit 
fi 
CODE_HOME=/home/www/app 
PROJECTNAME=qrealtime 
cd $CODE_HOME/$PROJECTNAME 
pid=`ps -ef |grep $PROJECTNAME |grep -v "grep" |awk '{print $2}' `  
if [ $pid ]; then 
  echo "App is running and pid=$pid" 
  kill -9 $pid 
fi 
nohup java -jar $CODE_HOME/$PROJECTNAME/target/$PROJECTNAME-0.0.1-SNAPSHOT.jar > /dev/null 2>&1 &

10、Spring Boot應(yīng)用的docker化

首先看Spring Boot應(yīng)用程序的docker化,由于Spring Boot內(nèi)嵌了tomcat、Jetty等容器,因此我們對(duì)docker鏡像的要求就是需要java運(yùn)行環(huán)境。我的應(yīng)用代碼的的Dockerfile文件如下:

#基礎(chǔ)鏡像:倉(cāng)庫(kù)是java,標(biāo)簽用8u66-jdk
FROM java:8u66-jdk
#當(dāng)前鏡像的維護(hù)者和聯(lián)系方式
MAINTAINER duqi duqi@example.com
#將打包好的spring程序拷貝到容器中的指定位置
ADD target/bookpub-0.0.1-SNAPSHOT.jar /opt/bookpub-0.0.1-SNAPSHOT.jar
#容器對(duì)外暴露8080端口
EXPOSE 8080
#容器啟動(dòng)后需要執(zhí)行的命令
CMD java -Djava.security.egd=file:/dev/./urandom -jar /opt/bookpub-0.0.1-SNAPSHOT.jar

因?yàn)槟壳暗氖纠绦虮容^簡(jiǎn)單,這個(gè)dockerfile并沒(méi)有在將應(yīng)用程序的數(shù)據(jù)存放在宿主機(jī)上。如果你的應(yīng)用程序需要寫(xiě)文件系統(tǒng),例如日志,最好利用VOLUME /tmp命令,這個(gè)命令的效果是:在宿主機(jī)的/var/lib/docker目錄下創(chuàng)建一個(gè)臨時(shí)文件并把它鏈接到容器中的/tmp目錄。

把這個(gè)Dockerfile放在項(xiàng)目的根目錄下即可,后續(xù)通過(guò)docker-compose build統(tǒng)一構(gòu)建:基礎(chǔ)鏡像是只讀的,然后會(huì)在該基礎(chǔ)鏡像上增加新的可寫(xiě)層來(lái)供我們使用,因此java鏡像只需要下載一次。

docker-compose是用來(lái)做docker服務(wù)編排,參看《Docker從入門(mén)到實(shí)踐》中的解釋?zhuān)?/p>

Compose 項(xiàng)目目前在 Github 上進(jìn)行維護(hù),目前最新版本是 1.2.0。Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。

Dockerfile 可以讓用戶(hù)管理一個(gè)單獨(dú)的應(yīng)用容器;而 Compose 則允許用戶(hù)在一個(gè)模板(YAML 格式)中定義一組相關(guān)聯(lián)的應(yīng)用容器(被稱(chēng)為一個(gè) project,即項(xiàng)目),例如一個(gè) Web 服務(wù)容器再加上后端的數(shù)據(jù)庫(kù)服務(wù)容器等。
單個(gè)docker用起來(lái)確實(shí)沒(méi)什么用,docker技術(shù)的關(guān)鍵在于持續(xù)交付,通過(guò)與jekins的結(jié)合,可以實(shí)現(xiàn)這樣的效果:開(kāi)發(fā)人員提交push,然后jekins就自動(dòng)構(gòu)建并測(cè)試剛提交的代碼,這就是我理解的持續(xù)交付。

11、守護(hù)進(jìn)程啟動(dòng)

使用java命令運(yùn)行應(yīng)用非常簡(jiǎn)單,但是通常我們都是通過(guò)ssh命令連接到服務(wù)器并運(yùn)行它,一旦ssh連接斷開(kāi),那么由它fork的java子進(jìn)程也就隨之銷(xiāo)毀了。所以我們必須借助工具將應(yīng)用作為服務(wù)運(yùn)行在服務(wù)器上:

Systemd

systemd 是Linux 下的一款系統(tǒng)和服務(wù)管理器。可以為Spring Boot應(yīng)用編寫(xiě)啟動(dòng)腳本:

[Unit] 
Description=Spring Boot Application 
 
[Service] 
ExecStart=/usr/bin/java -jar location_of_jar_file.jar --spring.config.location=location_of_config.properties --spring.profiles.active=profile 
User=${your expected user} 
 
[Install] 
WantedBy=multi-user.target

Supervisord

Supervisord配置:

[program:app] 
command=/usr/bin/java -jar location_of_jar_file.jar --spring.config.location=location_of_config.properties --spring.profiles.active=profile 
user=${your expected user} 
autostart=true 
autorestart=true 
startsecs=10 
startretries=3

12、生產(chǎn)環(huán)境運(yùn)維支持

與開(kāi)發(fā)和測(cè)試環(huán)境不同的是,當(dāng)應(yīng)用部署到生產(chǎn)環(huán)境時(shí),需要各種運(yùn)維相關(guān)的功能的支持,包括性能指標(biāo)、運(yùn)行信息和應(yīng)用管理等。所有這些功能都有很多技術(shù)和開(kāi)源庫(kù)可以實(shí)現(xiàn)。Spring Boot 對(duì)這些運(yùn)維相關(guān)的功能進(jìn)行了整合,形成了一個(gè)功能完備和可定制的功能集,稱(chēng)之為 Actuator。只需要在 POM 文件中增加對(duì) “org.springframe.boot:spring-boot-starter-actuator” 的依賴(lài)就可以添加 Actuator。Actuator 在添加之后,會(huì)自動(dòng)暴露一些 HTTP 服務(wù)來(lái)提供這些信息。這些 HTTP 服務(wù)的說(shuō)明如表 2。

Spring Boot Actuator 所提供的 HTTP 服務(wù)

名稱(chēng)說(shuō)明是否包含敏感信息
autoconfig顯示 Spring Boot 自動(dòng)配置的信息。
beans顯示應(yīng)用中包含的 Spring bean 的信息。
configprops顯示應(yīng)用中的配置參數(shù)的實(shí)際值。
dump生成一個(gè) thread dump。
env顯示從 ConfigurableEnvironment 得到的環(huán)境配置信息。
health顯示應(yīng)用的健康狀態(tài)信息。
info顯示應(yīng)用的基本信息。
metrics顯示應(yīng)用的性能指標(biāo)。
mappings顯示 Spring MVC 應(yīng)用中通過(guò)“
 @RequestMapping”添加的路徑映射。
shutdown關(guān)閉應(yīng)用。
trace顯示應(yīng)用相關(guān)的跟蹤(trace)信息。

對(duì)于表中的每個(gè)服務(wù),通過(guò)訪(fǎng)問(wèn)名稱(chēng)對(duì)應(yīng)的 URL 就可以獲取到相關(guān)的信息。如訪(fǎng)問(wèn)“/info”就可以獲取到 info 服務(wù)對(duì)應(yīng)的信息。服務(wù)是否包含敏感信息說(shuō)明了該服務(wù)暴露出來(lái)的信息是否包含一些比較敏感的信息,從而確定是否需要添加相應(yīng)的訪(fǎng)問(wèn)控制,而不是對(duì)所有人都公開(kāi)。所有的這些服務(wù)都是可以配置的,比如通過(guò)改變名稱(chēng)來(lái)改變相應(yīng)的 URL。下面對(duì)幾個(gè)重要的服務(wù)進(jìn)行介紹。

health 服務(wù)

Spring Boot 默認(rèn)提供了對(duì)應(yīng)用本身、關(guān)系數(shù)據(jù)庫(kù)連接、MongoDB、redis 和 Rabbit MQ 的健康狀態(tài)的檢測(cè)功能。當(dāng)應(yīng)用中添加了 DataSource 類(lèi)型的 bean 時(shí),Spring Boot 會(huì)自動(dòng)在 health 服務(wù)中暴露數(shù)據(jù)庫(kù)連接的信息。應(yīng)用也可以提供自己的健康狀態(tài)信息,如代碼清單 7 所示。

health 服務(wù)

@Component
public class AppHealthIndicator implements HealthIndicator {
 @Override
 public Health health() {
 return Health.up().build();
 }
}

應(yīng)用只需要實(shí)現(xiàn) org.springframework.boot.actuate.health.HealthIndicator 接口,并返回一個(gè) org.springframework.boot.actuate.health.Health 對(duì)象,就可以通過(guò) health 服務(wù)來(lái)獲取所暴露的信息。health 服務(wù)返回的

結(jié)果
{"status":"UP","app":{"status":"UP"},"db":{"status":"UP","database":"HSQL Database Engine","hello":1}}

info 服務(wù)

info 服務(wù)所暴露的信息是完全由應(yīng)用來(lái)確定的。應(yīng)用中任何以“info.”開(kāi)頭的配置參數(shù)會(huì)被自動(dòng)的由 info 服務(wù)來(lái)暴露。只需要往 application.properties 中添加以“info.”開(kāi)頭的參數(shù)即可,如:

info.app_name=My First Spring Boot Application
info.app_version=1.0.0

當(dāng)訪(fǎng)問(wèn)“/info”時(shí),訪(fǎng)問(wèn)的 JSON 數(shù)據(jù):{"app_name":"My First Spring Boot Application","app_version":"1.0.0"}

metrics 服務(wù)

當(dāng)訪(fǎng)問(wèn) metrics 服務(wù)時(shí),可以看到 Spring Boot 通過(guò) SystemPublicMetrics 默認(rèn)提供的一些系統(tǒng)的性能參數(shù)值,包括內(nèi)存、CPU、Java 類(lèi)加載和線(xiàn)程等的基本信息。應(yīng)用可以記錄其他所需要的信息。Spring Boot 默認(rèn)提供了兩種類(lèi)型的性能指標(biāo)記錄方式:gauge 和 counter。gauge 用來(lái)記錄單個(gè)絕對(duì)數(shù)值,counter 用來(lái)記錄增量或減量值。比如在一個(gè) Web 應(yīng)用中,可以用 counter 來(lái)記錄當(dāng)前在線(xiàn)的用戶(hù)數(shù)量。當(dāng)用戶(hù)登錄時(shí),把 counter 的值加 1;當(dāng)用戶(hù)退出時(shí),把 counter 的值減 1。

示例:

@RestController
public class GreetingsController {
 @Autowired
 private CounterService counterService;
 @RequestMapping("/greet")
 public String greet() {
 counterService.increment("myapp.greet.count");
 return "Hello!";
 }
}

上面代碼添加了對(duì) Spring Boot 提供的 CounterService 的依賴(lài)。當(dāng) greet 方法被調(diào)用時(shí),會(huì)把名稱(chēng)為“myapp.greet.count”的計(jì)數(shù)器的值加 1。也就是當(dāng)用戶(hù)每次訪(fǎng)問(wèn)“/greet”時(shí),該計(jì)算器就會(huì)被加 1。除了 CounterService 之外,還可以使用 GaugeService 來(lái)記錄絕對(duì)值。

看完上述內(nèi)容,你們對(duì)使用Spring boot怎么打包部署應(yīng)用有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

新聞名稱(chēng):使用Springboot怎么打包部署應(yīng)用
分享地址:http://m.newbst.com/article34/gdspse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)軟件開(kāi)發(fā)定制開(kāi)發(fā)網(wǎng)頁(yè)設(shè)計(jì)公司品牌網(wǎng)站設(shè)計(jì)App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)