Файл Spring Spring Boot War получает 404 на ec2

Я собрал простую программу Eclipse Spring Boot Rest. Просто пара конечных точек, которые возвращают некоторые строки. Я создаю его с помощью плагина Eclipse Gradle. Нет проблем, он отлично работает в Eclipse, предоставленном экземпляре Tomcat. Я также запускал его на родных окнах Tomcat. Я развернул файл.war с помощью менеджера веб-приложений tomcat, используя функцию развертывания. Работает нормально. Затем я развернул экземпляр ec2 ubuntu и снова использовал менеджер веб-приложений tomcat и загрузил файл.war. Остальная программа корректно отображается в окне приложений, но не запускается. Я использовал следующий URL,

http://ec2-ip-address/demo-0.0.1-SNAPSHOT/hello

Я продолжаю получать 404. Я почти уверен, что развертывание tomcat и среда ec2 выглядят правильно, потому что я могу без проблем запускать примеры tomcat7 в экземпляре ec2. Любая помощь будет оценена.

Файл AwsElbRestServerAApplication.java:

package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@SpringBootApplication
public class AwsElbRestServerAApplication {

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

Файл ServletInitializer.java:

package demo

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class ServletInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder      application) {
        return application.sources(AwsElbRestServerAApplication.class);
    }
}

Файл RestController.java:

package demo

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class RestController {

    @RequestMapping("/hello")
    public @ResponseBody String hello() {

        return "Greetings from Server A";
    }

    @RequestMapping("/heartbeat")
    public @ResponseBody String heartbeat() {

        return "Server A is still running";
    }
}

файл build.gradle:

buildscript {
    ext {
        springBootVersion = '1.2.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle
        plugin:${springBootVersion}") 
        classpath("io.spring.gradle:dependency-management
        Plugin:0.5.1.RELEASE")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'idea'
apply plugin: 'spring-boot' 
apply plugin: 'io.spring.dependency-management' 
apply plugin: 'war'

war {
    baseName = 'demo'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
    maven { url "http://repo.spring.io/libs-snapshot" }
}

configurations {
    providedRuntime
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-actuator")
    compile("org.springframework.boot:spring-boot-starter-remote-shell")
    compile("org.springframework.boot:spring-boot-starter-web")
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
    testCompile("org.springframework.boot:spring-boot-starter-test") 
}

eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/
         org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/
         JavaSE-1.8'
    }
}

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

1 ответ

Решение

Я ответил на аналогичный вопрос здесь.

Вы запускаете свой внешний tomcat под JRE Java 1.7, скомпилировав свой код для 1.8.

Как ни странно, ошибки нет, и приложение появляется в приложении менеджера, но затем вы получаете 404, когда пытаетесь получить к нему доступ.

Один из способов подтвердить это - посмотреть на вывод журнала tomcat, вы не увидите баннер Spring Boot.

Чтобы решить эту проблему, вы можете скомпилировать свой код для Java 1.7.

Другие вопросы по тегам