簡體   English   中英

如何將 Spring Boot 應用程序項目部署到 Heroku

[英]How to deploy spring boot app project to Heroku

我創建了一個簡單的服務器,它使用 JPA 存儲庫並在 Json 中返回響應。 它包括 post 和 get 方法。 這是一個 spring starter 啟動應用程序項目,一切都在我的本地主機上運行(我使用郵遞員發送和接收 json 對象)。 我的問題是當我嘗試部署到 Heroku 時遇到了很多問題。 我添加了一個 jetty-runner 依賴項和插件。 我還創建了一個 procfile,如下所示:

web: java $JAVA_OPTS -jar target/dependency/jetty-runner.jar --port $PORT target/*.war

最初目標文件夾是空的, foreman start web說它couldn't find my war file ,所以我在 pom.xml 中添加了以下行:

<packaging>war</packaging>

但是項目創建了一個錯誤,所以我禁用了項目的 maven 特性,然后再次配置了 maven,然后它在目標文件夾中包含了 pom.properties 和 pom.xml。 當我嘗試部署它時,它說它無法訪問目標/依賴項中的 jetty jar 文件,因為沒有這樣的文件夾。 所以我做了maven install並安裝了丟失的文件夾。 現在我收到錯誤No transaction manager can be found ,所以我安裝了 jetty-plus 和 Atomikos 的依賴項。 但是現在我仍然收到沒有找到事務管理器並且有一個 java.net.bindexception 的錯誤。

我覺得我真的走錯了路。 我想知道是否有人可以從一開始就告訴我如何將 Spring Starter Boot 項目部署到 heroku。 任何幫助將不勝感激。

這是我的 pom.xml 文件:

<?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>

    <groupId>org.test</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>Challenge-Server1</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-runner</artifactId>
            <version>7.4.5.v20110725</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jta-atomikos</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
             <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-dependency-plugin</artifactId>
              <version>2.3</version>
              <executions>
                <execution>
                  <phase>package</phase>
                  <goals><goal>copy</goal></goals>
                  <configuration>
                    <artifactItems>
                      <artifactItem>
                        <groupId>org.mortbay.jetty</groupId>
                        <artifactId>jetty-runner</artifactId>
                        <version>7.4.5.v20110725</version>
                        <destFileName>jetty-runner.jar</destFileName>
                      </artifactItem>
                    </artifactItems>
                  </configuration>
                </execution>
              </executions>
            </plugin>
        </plugins>
    </build>


</project>

我發現部署 spring boot 應用程序與部署 spring boot mvc 項目有點不同。 基本上您不需要 jetty-runner 依賴項或插件,您只需執行以下步驟:

  • 配置一個 mvn 項目
  • mvn 清理並安裝
  • 將 Procfile 聲明為: web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/*.jar

全部來自本網站: http : //web.archive.org/web/20171018145733/http : //nicholaspaulsmith.com/spring-boot-on-heroku/

我在我的博客中概述了一些細節

https://exampledriven.wordpress.com/2016/11/04/spring-boot-heroku-example/

重點是像這樣使用heroku maven插件

heroku plugins:install heroku-cli-deploy
mvn clean install
# Creates an app with the specified name, without setting up a git remote
heroku create <APP-NAME> --no-remote

#deploys the jar file
heroku deploy:jar target/demo-0.0.1-SNAPSHOT.jar --app <APP-NAME>

但還有更多細節,例如如何設置 CI/CD 管道

有多種方法可以在heroku上部署基於Spring Boot的應用程序。

您可以直接部署從基於Spring Boot的應用程序創建的jar文件。還可以將代碼上傳到heroku,然后觸發構建。

使用Heroku Cli,我們可以執行以下方法

$ heroku deploy:jar target/SpringHeroku-0.0.1-SNAPSHOT.jar --app <APP-NAME>

使用Procfile方式進行部署:-

將文件檢入到heroku存儲庫后,我們可以觸發構建,但隨后需要在我們的配置文件中包含一個proc文件。

請檢查我找到的有關如何使用Procfile配置和部署Spring Boot的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM