我创建了一个使用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 .
我觉得我真的走错了路 . 我想知道是否有人可以从一开始就告诉我如何将 spring 启动器启动项目部署到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 回答
我发现部署spring boot应用程序与部署spring boot mvc项目有点不同 . 基本上你不需要jetty-runner依赖或插件,你只需要执行以下步骤:
配置mvn项目
mvn清理并安装
将Procfile声明为:web:java $ JAVA_OPTS -Dserver.port = $ PORT -jar target / * .jar
全部来自本网站:http://nicholaspaulsmith.com/spring-boot-on-heroku/
我在博客中概述了一些细节
https://exampledriven.wordpress.com/2016/11/04/spring-boot-heroku-example/
重点是使用像这样的heroku maven插件
但是有更多细节,比如如何设置CI / CD管道
有各种方法可以在heroku上部署基于Spring Boot的应用程序 .
您可以直接部署从基于spring boot的app创建的jar文件 . 您也可以将代码上传到heroku,然后触发构建 .
Using a Heroku Cli we can do following way
ProcFile Way :-
一旦你将文件签入heroku存储库,我们就可以触发一个构建,但是它需要有一个我们需要配置的proc文件 .
请检查我找到的关于how to configure and deploy Spring Boot Using Procfile.的链接