REST调用Spring引导RestController在tomcat中生成404,但在嵌入式tomcat中工作

时间:2016-09-11 09:58:15

标签: rest spring-boot

我是春季靴子的新手。我对Spring mvc有所了解。我已经使用一个@RestController开发了一个小应用程序,如下面的更新中所述。当我使用mvn spring-boot:run(即嵌入式tomcat)

执行时,这工作正常
  1. 当我将打包的war部署到tomcat时,相同的REST调用会导致404 not found。目标网址 http://localhost:8086/myapp/demo给出了404。

  2. 我创建了log4j2.xml,当我使用嵌入式tomcat执行时,它会创建预期的日志文件,但是使用外部tomcat部署它也不会创建日志文件而且我找不到任何日志在<tomcat-dir>/logs

  3. 下的任何tomcat日志中

    我在这里缺少什么?

    更新:

    spring boot入口点类:

    @SpringBootApplication
    @RestController
    public class App extends SpringBootServletInitializer {
        public static void main(String[] args) {
            SpringApplication.run(App.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(
                SpringApplicationBuilder application) {
            return application.sources(App.class);
        }
    
        @RequestMapping("/demo")
        public String demo() {
            return "Helloo.. !!";
        }
    }
    

    Spring boot version =&gt; v1.3.2.RELEASE

    部署到tcServer时的日志

    INFO: Deploying web application archive C:\Users\a\vfabric-tc-server\vm1\webapps\myapp.war
    Sep 12, 2016 5:07:23 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
    INFO: validateJarFile(C:\Users\a\vfabric-tc-server\vm1\webapps\myapp\WEB-INF\lib\tomcat-embed-el-8.0.30.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
    Sep 12, 2016 5:07:24 PM org.apache.catalina.startup.TldConfig execute
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    Sep 12, 2016 5:07:24 PM org.apache.catalina.core.ApplicationContext log
    INFO: Spring WebApplicationInitializers detected on classpath: [org.springframework.boot.autoconfigure.jersey.JerseyAutoConfiguration$JerseyWebApplicationInitializer@47b35d]
    Sep 12, 2016 5:07:24 PM org.apache.catalina.startup.HostConfig deployWAR
    INFO: Deployment of web application archive C:\Users\a\vfabric-tc-server\vm1\webapps\myapp.war has finished in 1,913 ms
    

    UPDATE1: 我删除了Angular,只保留了spring boot @restcontroller。问题仍然存在。

2 个答案:

答案 0 :(得分:0)

您是否可以将Tomcat嵌入式服务器的范围更改为POM文件中的“提供”或部署到非嵌入式Tomcat容器中,最好排除JAR(因此将其注释掉也是一个不错的选择)。

我遇到了与Spring BOOT的旧v1.3.x类似的问题。我没有在新版本中观察到这一点,即v1.4.0。

我假设您在项目POM中使用Spring BOOT父POM和“spring-boot-starter”lib。

答案 1 :(得分:0)

这是指向JDK6的目标外部Tomcat服务器的问题,但我的应用程序是使用jdk7构建的。 一旦我将外部Tomcat指向jdk7,问题就解决了。