如何将Spring启动应用程序项目部署到Heroku

时间:2015-07-17 20:41:38

标签: java spring maven heroku spring-boot

我创建了一个使用JPA存储库并在Json中返回响应的简单服务器。它包括post和get方法。它是一个Spring starter启动应用程序项目,一切都在我的localhost上运行(我使用postman发送和接收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。

我觉得我真的走错了路。我想知道是否有人可以从一开始就告诉我如何将弹簧启动器启动项目部署到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>

3 个答案:

答案 0 :(得分:5)

我发现部署spring boot应用程序与部署spring boot mvc项目有点不同。基本上你不需要jetty-runner依赖或插件,你只需要执行以下步骤:

  • 配置mvn项目
  • mvn clean and install
  • 将Procfile声明为:web:java $ JAVA_OPTS -Dserver.port = $ PORT -jar target / * .jar

从本网站发现的所有内容: http://nicholaspaulsmith.com/spring-boot-on-heroku/

答案 1 :(得分:1)

我在博客中概述了一些细节

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管道

答案 2 :(得分:0)

有多种方法可以在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文件。

请检查我发现的有关how to configure and deploy Spring Boot Using Procfile.的链接