gpt4 book ai didi

java - 如何将 Spring Boot 程序部署到 Amazon Elastic Beanstalk?

转载 作者:搜寻专家 更新时间:2023-11-01 01:32:54 25 4
gpt4 key购买 nike

我对 AWS 和 Spring Framework 都很陌生。

我已经构建了 a simple web program按照 Spring 网站中的入门指南进行操作。此外,我已经制作了运行 Tomcat 8 和 Java 8 的 Elastic Beanstalk 应用程序和环境。我正在尝试的是;

  1. 使用 Gradle 构建这个简单的程序并生成可执行的 jar(或 war)。
  2. 从我的 Elastic Beanstalk 仪表板中的“上传和部署”按钮上传此可执行 jar(或 war)。

我现在正在使用 IntelliJ,如果我双击生成的可执行 jar,我的程序运行良好。然而,在我将这个 jar 上传到我的 Elastic Beanstalk 之后,这个程序只产生 HTTP 404 错误。

我不明白的是,如果我使用 Gradle“构建”任务或“bootRun”任务,生成的可执行 jar 文件可以正常工作。但是,如果我通过 Gradle 'war' 任务构建一个 war 文件并将其放在我的本地 Tomcat 上,服务器会产生与 AWS 相同的 HTTP 404 错误。

这是我的 build.gradle 文件。

    buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.7.RELEASE")
classpath("org.apache.tomcat:tomcat-catalina:8.0.28")
}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'

jar {
baseName = 'gs-authenticating-ldap'
version = '0.1.0'
}

war {
baseName = 'gs-authenticating-ldap'
version = '0.1.0'
}

repositories {
mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
testCompile("junit:junit")
}

task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}

此外,我的程序只有两个Java类:src/main/java/hello/HomeController.javasrc/main/java/hello/Application.java

src/main/java/hello/HomeController.java 是:

package hello;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

@RequestMapping("/")
public String index() {
return "Welcome to the home page!";
}
}

src/main/java/hello/Application.java 是:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

总结:

  • build 'bootRun' -> browse "localhost:8080": 工作正常。
  • build 'build' -> produce 'xxx.jar(executable)' -> 双击执行这个 jar -> 浏览“localhost:8080”:工作正常
  • 构建 'build' -> 生成 'xxx.jar(executable)' -> 上传到 AWS -> 浏览“xx.elasticbeanstalk.com”:HTTP 404 错误
  • 构建 'war' -> 生成 'xxx.war' -> 使用 IntelliJ 在本地 Tomcat 上运行此 war -> 浏览“localhost:8080”:HTTP 404 错误
  • 构建“war”-> 生成“xxx.war”-> 上传到 AWS -> 浏览“xx.elasticbeanstalk.com”:HTTP 404 错误

我想做的是 1) 在 IntelliJ 上开发,2) 在 Gradle 上构建,3) 在本地测试,以及 4) 上传到 AWS 上运行。请帮帮我。

如果您有任何进一步的解释或信息,请告诉我。谢谢!

最佳答案

我有一个类似的问题,你需要做的是首先让你的Application类扩展SpringBootServletInitializer:

package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}

它将使用 Spring Framework 的 Servlet 支持初始化您的应用程序(Tomcat 将能够注册 servlet 并启动应用程序)。

然后你必须告诉Gradle环境运行时将由应用服务器提供。为此,请在依赖项下添加以下行:

dependencies {
// …
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
// …
}

建立一个新的 war (build war)并部署它。

有关更多信息,请参阅有关如何将 Spring Boot 应用部署为 war 的文档:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

关于java - 如何将 Spring Boot 程序部署到 Amazon Elastic Beanstalk?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718574/

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