2017-01-15 5 views
1

Примечание. Аналогичные вопросы относятся к этому, но ни одно из решений не работает для меня. Я потратил несколько дней, пытаясь заставить это работать.Веб-приложение Spring boot не работает на Tomcat - ошибка 404

Я развернул WAR-файл для Tomcat, и «Tomcat Web Application Manager» показывает, что он запущен. Когда я нажимаю на веб-приложение «/ предсказатель», я получаю ошибку 404. Веб-приложение работает при запуске из отладчика (IntelliJ). Файл WAR назван "forecaster.war" и пути я попытался это: http://localhost:8080/forecaster/ http://localhost:8080/forecaster/forecast/ http://localhost:8080/forecaster/forecast/1

"catalina.sh старт" выход:

Using CATALINA_BASE: /Library/Tomecat 
Using CATALINA_HOME: /Library/Tomecat 
Using CATALINA_TMPDIR: /Library/Tomecat/temp 
Using JRE_HOME:  /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home 
Using CLASSPATH:  /Library/Tomecat/bin/bootstrap.jar:/Library/Tomecat/bin/tomcat-juli.jar 
Tomcat started. 

build.gradle:

buildscript { 
    ext { 
     springBootVersion = '1.4.3.RELEASE' 
    } 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
     classpath("org.springframework.boot:spring-boot-devtools:1.4.3.RELEASE") 
     classpath("org.springframework:spring-jdbc:4.3.5.RELEASE") 
    } 
} 

apply plugin: 'java' 
apply plugin: 'org.springframework.boot' 
apply plugin: 'idea' 
apply plugin: 'war' 

jar { 
    baseName = 'forecaster' 
    version = '0.0.3-SNAPSHOT' 
} 

sourceCompatibility = 1.7 
targetCompatibility = 1.7 

repositories { 
    mavenCentral() 
} 

bootRun { 
    addResources = true 
} 

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-actuator') 
    compile("org.springframework.boot:spring-boot-starter-freemarker") 
    compile('org.springframework.boot:spring-boot-starter-web') 
    compile('org.springframework.boot:spring-boot-starter-web-services') 
    compile('org.springframework.boot:spring-boot-starter-jdbc') 
    compile("org.springframework:spring-jdbc") 
    compile("org.springframework.boot:spring-boot-devtools") 
    runtime('org.postgresql:postgresql') 
    compileOnly('org.projectlombok:lombok') 
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' 
    testCompile('org.springframework.boot:spring-boot-starter-test') 
} 

ForecasterApplication.java:

package com.brian.project.forecaster; 

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; 
import org.springframework.boot.builder.SpringApplicationBuilder; 
import org.spring 

framework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication(exclude=DataSourceAutoConfiguration.class) 
public class ForecasterApplication extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 
     return builder.sources(ForecasterApplication.class); 
    } 

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

ForecastController.java:

package com.brian.project.forecaster.controller; 

import com.fasterxml.jackson.core.JsonProcessingException; 
import com.brian.project.forecaster.services.DatabaseRepository; 
import org.springframework.stereotype.Controller; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

@Controller 
public class ForecastController { 

    @Autowired 
    private DatabaseRepository databaseRepository; 

    @RequestMapping(value = "forecast/{id}") 
    public String getForecastForChain(@PathVariable Integer id, Model model) throws JsonProcessingException, IOException 
    { 

     model.addAttribute("futureForecastData", "Say 404 again I dare you..."); 
     model.addAttribute("storeName", "test store name"); 

     return "forecast"; 
    } 
} 

ответ

1

Я в конечном итоге, следуя инструкциям здесь вместо того, чтобы использовать IntelliJ.

https://spring.io/guides/gs/spring-boot/#_run_the_application

Чтобы запустить приложение локально:

./gradlew build && java -jar build/libs/forecaster/forecaster-0.0.3-SNAPSHOT.jar 

Чтобы построить войну я добавил в файл build.gradle:

war { 
    baseName = 'forecaster' 
    version = '0.0.3-SNAPSHOT' 
} 

Тогда я побежал:

./gradlew build 

Это произвело файл WAR здесь:

сборки/Libs/предсказатель/предсказатель-0.0.3-SNAPSHOT.jar

И я скопировал на внешний сервер Tomcat8 (где/внешний-тест/это смонтированный самба папка монтируется в/Library/Tomcat/WebApps):

cp build/libs/forecaster/forecaster-0.0.3-SNAPSHOT.war /external-test/forecaster.war 

Теперь он работает с этим URL:

http://localhost:8080/forecaster/forecast/1

+0

Проклятые Благодаря тонну человек, которого ты спас меня, я был у него в течение нескольких часов, я попытался запустить его из IDE работает главный класс в качестве приложения Java, используя МВН установки и и Java -jar ничего не работал, то же 404, только инструкции в статье работали для работы, все еще не уверены, почему – Sam2016

+0

@ Sam2016 Добро пожаловать. Мне определенно потребовалось некоторое время, чтобы заставить его работать. – Brian

Смежные вопросы