2015-04-01 72 views
1

我熟悉使用servlet映射Spring的舊方法,但我想我會嘗試SpringBoot爲新應用程序更快地開始並儘可能使用默認值。SpringBoot helloworld MVC應用程序將不會加載

我似乎無法得到最基本的helloworld控制器工作。

看來SpringBoot根本不是自舉的。我在Application main方法中放置了一個斷點,它不會中斷。

使用gradle構建項目,並通過IntelliJ部署在tomcat中。

我錯過了一些非常簡單的東西,我確定。但是它是什麼?

這裏是gradle這個文件:

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

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


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

repositories { 
    mavenCentral() 
} 

configurations { 
    providedRuntime 
} 

dependencies { 
    compile("org.springframework.boot:spring-boot-starter-actuator") 
    compile("org.springframework.boot:spring-boot-starter-security") 
    compile("org.springframework.boot:spring-boot-starter-aop") 
    compile("org.springframework.boot:spring-boot-starter-data-jpa") 
    compile("org.springframework.boot:spring-boot-starter-web") 
    compile("org.springframework.boot:spring-boot-starter-log4j2") 
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 
} 

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

Application.java

@SpringBootApplication 
public class TestApplication { 

public static void main(String[] args) { 
    ApplicationContext ctx = SpringApplication.run(TestApplication.class, args); 
} 
} 

的Servlet初始化:

public class ServletInitializer extends SpringBootServletInitializer { 
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(TestApplication.class); 
    } 
} 

和控制器:

@RestController 
@EnableAutoConfiguration 
public class IndexController { 
    @RequestMapping("/") 
    public String index() { 
     return "Greetings from Spring Boot!"; 
    } 
} 
+0

如果你部署它,main將不會運行。爲此只需運行它作爲Java應用程序。 – 2015-04-01 11:44:51

+0

謝謝。我認爲那就是它。所有的例子都是用捆綁的應用服務器運行jar。我真的想建立一個可以部署的戰爭。 SpringBoot能夠像普通的戰爭一樣工作嗎? – 2015-04-01 11:49:05

+0

其實根據的「包裝可執行的JAR和WAR文件」的文檔我與配置{ providedRuntime }等,所以我認爲主要的方法將不會被使用得到正確的配置,但我還是什麼都看不到發生。我的根URL提供了一個404,並嘗試更改application.properties中的日誌配置完全沒有影響。 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins-gradle-packaging – 2015-04-01 11:51:58

回答

1

開始我會檢查它與嵌入式配置(即通過運行main方法,從你的gradle配置中移除你的Tomcat提供的依賴項)。

這也是值得投入的完整的日誌記錄,加入

logging.level.org.springframework.web:DEBUG

您application.properties/yaml

一旦你確定這,構建戰爭,部署併發布tomcat服務器日誌。如果是servlet 3+,您應該看到有關檢測到的ServletInitializers的消息。

順便說一句,你@EnableAutoConfiguration是多餘的,因爲@SpringBootApplication註釋包括前:

http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-using-springbootapplication-annotation.html

+0

感謝您的反饋。我已經嘗試調試日誌記錄,但我很確定它不工作,因爲SpringBoot不是boostrapping。我同意這是一個ServletInitializer問題,看起來有點神奇,當魔法沒有按照它應該發生的時候,這永遠不會有趣。在使用bootRun gradle任務時,我可以看到更多的活動,所以在回到ServletInitializer問題之前,會嘗試完成這個工作。 – 2015-04-02 20:59:48

+0

我正在研究一個類似問題的應用程序 - 它只是掛在Glassfish上的servlet初始化階段,沒有消息,雖然在Tomcat上工作正常。看起來似乎有些應用程序服務器在初始階段傾向於吞下錯誤。 很高興你把它分類。 – PaulNUK 2015-04-03 21:25:45

2

發現問題。

我開始了一個沒有彈簧啓動的新應用程序。只是一個老式的基於xml的spring應用程序,用這種方法我可以看到一個異常。它抱怨在一個Java版本中編譯並在另一箇中運行。我試圖讓它在Java 8中工作。

我已經切換回Java 7,果然,SpringBoot應用程序工作正常。

感謝PaulINUK的建議。如果在引導SpringBoot時遇到問題,則看不到異常並不是很好。

相關問題