gpt4 book ai didi

java - Heroku Spring Boot Web 服务始终返回 404,但不在本地主机上返回

转载 作者:行者123 更新时间:2023-12-02 12:57:50 48 4
gpt4 key购买 nike

我开发了一个 Web 服务,正在尝试将其部署到 Heroku。它似乎很成功,但每当我尝试调用我的 URL 之一时,我都会收到 404。我知道这意味着该资源不可用,但它在本地主机上工作正常。

Heroku 部署的输出是标准 Spring boot,但缺少:

2016-05-23 22:29:22.145  INFO 15785 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/home],methods=[GET]}" onto public org.springframework.http.ResponseEntity<java.util.List<entity.Giver>> controller.GiverController.getHomeContent(javax.servlet.http.HttpServletRequest)

我通常从在本地主机上运行应用程序得到的行(输出只是我拥有的众多输出之一)。

我怀疑当 Heroku 启动我的应用程序时,注释映射不会被“编译”,因为它不会打印在日志中,但我只是猜测。

我的程序文件:

web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/hams-x-jar-with-dependencies.jar

这是我的 pom.xml 文件中的依赖项和插件(我排除了打包等,因为它们不重要):

<properties>
<java.version>1.8</java.version>
<spring.boot.version>1.3.3.RELEASE</spring.boot.version> <!--Variable-->
<tomcat.version>8.0.32</tomcat.version>
</properties>

<!--
Allows versioning and not to use the parent tag for spring boot framework
-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring.boot.version}</version>
</dependency>

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.1.0.Final</version>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1207</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-hibernate5</artifactId>
<version>2.7.4</version>
</dependency>

</dependencies>

<build>
<plugins>

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
</plugin>

<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>1.0.0</version>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>controller.Application</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>controller.Application</mainClass>
</manifest>
</archive>

</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>

</plugins>
</build>

Controller 使用 @RestController 以及路径的 @RequestMapping 注释:

@RestController
public class GiverController {

@RequestMapping(value = "/home", method = RequestMethod.GET)
public ResponseEntity<List<Giver>> getHomeContent(HttpServletRequest request) {
List<Giver> homepageContent = GiverAPI.getHomePageContent();

if (homepageContent == null) {
return new ResponseEntity<List<Giver>>(HttpStatus.INTERNAL_SERVER_ERROR);
}

return new ResponseEntity<List<Giver>>(homepageContent, HttpStatus.OK);
}

}

该应用程序是一个 Maven 项目,包含带有 Spring Boot 的 TomCat servlet,它将所有内容打包到 .jar 文件中。

我用于部署的 Heroku CLI 命令是:

mvn clean heroku:deploy

希望有人能帮助我。

最佳答案

spring-boot-starter-parent POM 包括 <executions>配置绑定(bind) repackage目标。如果您不使用父 POM,则需要自己声明此配置。因此,删除 maven-assembly-pluginmaven-jar-plugin插件定义并使用以下内容:

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<configuration>
<mainClass>controller.Application</mainClass>
<layout>ZIP</layout>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>

同时更改 Procfile并使用新的jar那里的文件名。当您不使用父 pom 时,这是创建可执行 jar 的最简单方法。查看Spring Boot documentation了解更多信息。

关于java - Heroku Spring Boot Web 服务始终返回 404,但不在本地主机上返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37400444/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com