带有 Maven 应用程序的 Spring Boot 的 Heroku jar 部署,代码 = H10

Posted

技术标签:

【中文标题】带有 Maven 应用程序的 Spring Boot 的 Heroku jar 部署,代码 = H10【英文标题】:Heroku jar deployment of Spring Boot with Maven Application giving code=H10 【发布时间】:2018-04-05 09:03:30 【问题描述】:

当我尝试访问我的部署时,我收到代码错误 H10。 我读到这是因为我必须为应用程序设置一个动态端口。 我已经尝试了 Heroku 开发中心上提供的所有配置,但没有运气。

这是我的 pom.xml:

`   


<groupId>dogbook</groupId>
        <artifactId>dog-book</artifactId>
        <version>1.0</version>
        <packaging>jar</packaging>

        <name>dog-book</name>
        <description>Dog Book Backend</description>

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.4.RELEASE</version>
            <relativePath />
        </parent>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <start-class>br.dogbook.Application</start-class>
            <full-artifact-name>target/$project.artifactId-$project.version.jar</full-artifact-name>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</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>io.jsonwebtoken</groupId>
                <artifactId>jjwt</artifactId>
                <version>0.7.0</version>
            </dependency>

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>

            <dependency>
                <groupId>org.jboss.resteasy</groupId>
                <artifactId>resteasy-jackson-provider</artifactId>
                <version>1.1.GA</version>
                <scope>compile</scope>
            </dependency>

        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-info</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>pl.project13.maven</groupId>
                    <artifactId>git-commit-id-plugin</artifactId>
                    <configuration>
                        <dotGitDirectory>../.git</dotGitDirectory>
                    </configuration>
                </plugin>

                <plugin>
                <groupId>com.heroku.sdk</groupId>
                <artifactId>heroku-maven-plugin</artifactId>
                <version>1.2.2</version>
                <configuration>
                    <appName>dog-book</appName>
                    <includeTarget>false</includeTarget>
                    <includes>
                        <include>$basedir/$full-artifact-name</include>
                    </includes>
                    <jdkVersion>1.8</jdkVersion>
                    <processTypes>
                        <web>java $JAVA_OPTS -jar $full-artifact-name</web>
                    </processTypes>
                </configuration>
            </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                            <configuration>
                                <artifactItems>
                                    <artifactItem>
                                        <groupId>com.github.jsimone</groupId>
                                        <artifactId>webapp-runner</artifactId>
                                        <version>8.5.11.3</version>
                                        <destFileName>webapp-runner.jar</destFileName>
                                    </artifactItem>
                                </artifactItems>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
`

还有我的 main/resources/application.yml:

`
server:
   port: 8080

---
  spring:
     profiles: heroku
  server:
    port: $PORT
`

这是完整的错误:(更新)

`

2017-10-25T04:22:38.012290+00:00 heroku[web.1]: State changed from starting to crashed
    2017-10-25T09:51:04.226590+00:00 heroku[web.1]: State changed from crashed to starting
    2017-10-25T09:51:06.553784+00:00 heroku[web.1]: Starting process with command `java -Dserver.port=44562 -jar target/dog-book-1.0.jar`
    2017-10-25T09:51:07.883843+00:00 app[web.1]: Setting JAVA_TOOL_OPTIONS defaults based on dyno size. Custom settings will override them.
    2017-10-25T09:51:07.884774+00:00 app[web.1]: Error: Unable to access jarfile target/dog-book-1.0.jar
    2017-10-25T09:51:07.966920+00:00 heroku[web.1]: State changed from starting to crashed
    2017-10-25T09:51:07.954716+00:00 heroku[web.1]: Process exited with status 1
    2017-10-25T10:50:16.461375+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=dog-book.herokuapp.com request_id=945fe406-6784-4a03-8ec3-cd997da8b023 fwd="189.34.55.2" dyno= connect= service= status=503 bytes= protocol=https
    2017-10-25T10:50:17.185622+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=dog-book.herokuapp.com request_id=01ce7010-cd8d-49f1-a039-f628f0e8e829 fwd="189.34.55.2" dyno= connect= service= status=503 bytes= protocol=https
    2017-10-25T11:02:09.761721+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=dog-book.herokuapp.com request_id=035c33ce-0340-4695-9c46-0f825bf20a24 fwd="189.34.55.2" dyno= connect= service= status=503 bytes= protocol=https
    2017-10-25T11:02:10.575906+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=dog-book.herokuapp.com request_id=a52d39bb-f402-4fec-b2f4-9c6888893706 fwd="189.34.55.2" dyno= connect= service= status=503 bytes= protocol=https

`

我也已经配置了没有扩展名的 Procfile。

web: $JAVA_OPTS -Dserver.port=$PORT -jar target/dog-book-1.0.jar

还是一样。

有什么想法吗?

【问题讨论】:

【参考方案1】:

与 heroku 默认使用的 war 不同,jar 未在 Heroku 检查可用性的同一端口上侦听。

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

--server.port=$PORT 添加到Procfile 的技巧对我有用。

但添加 server.port=$PORT:8080 到 Spring 的 application.properties 被拿起并且完美地工作!

【讨论】:

【参考方案2】:

错误日志不完整。使用您的帐户访问 herokuapp.com 登录。您将看到完整的日志。在此处分享该日志。您还应该检查 Java 版本和数据库连接。大多数情况下,jdbc 驱动程序注册是主要原因。

【讨论】:

像这样修复你的 Procfile:java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war 更新您的 Procfile 后;如果它不起作用。我建议您创建简单的 Maven Web 项目。我在没有弹簧启动的情况下构建了我的应用程序。效果很好。

以上是关于带有 Maven 应用程序的 Spring Boot 的 Heroku jar 部署,代码 = H10的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Data 的 Spring Boot Maven 多模块项目

带有 Maven Shade 插件的 Spring Boot - 未映射控制器(404 错误)

带有 Spring Boot 的多模块 Web 应用程序 Maven 架构

`spring-boot-maven-plugin` 和 `maven-compiler-plugin` 有啥区别?

spring-boo hello world程序

带有 Maven 应用程序的 Spring Boot 的 Heroku jar 部署,代码 = H10