即使使用IDE(eclipse)或命令提示符启动,Spring Boot应用程序也无法启动并运行

时间:2018-10-22 09:04:09

标签: java spring spring-boot tomcat8

仅在eclipse中创建一个spring boot应用程序并尝试运行它,但是它启动得不够正确,无法处理请求。以下显示控制台 尝试了在同一问题上提出的其他问题的所有解决方案。但没有用。

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.6.RELEASE)

2018-10-22 14:12:42.929  INFO 5752 --- [           main] com.nevro.TrainingApiApp                 : Starting TrainingApiApp on DESKTOP-AUANCVF with PID 5752 (E:\MyStuff\Tutorials\spring-boot-training\target\classes started by acer in E:\MyStuff\Tutorials\spring-boot-training)
2018-10-22 14:12:42.932  INFO 5752 --- [           main] com.nevro.TrainingApiApp                 : No active profile set, falling back to default profiles: default
2018-10-22 14:12:43.004  INFO 5752 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@19d37183: startup date [Mon Oct 22 14:12:43 IST 2018]; root of context hierarchy
2018-10-22 14:12:43.758  INFO 5752 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2018-10-22 14:12:43.770  INFO 5752 --- [           main] com.nevro.TrainingApiApp                 : Started TrainingApiApp in 1.137 seconds (JVM running for 1.725)
2018-10-22 14:12:43.783  INFO 5752 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@19d37183: startup date [Mon Oct 22 14:12:43 IST 2018]; root of context hierarchy
2018-10-22 14:12:43.785  INFO 5752 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown

它说应用程序已启动,但是当尝试浏览它时,浏览器中没有错误。

tomcat(8080)的默认端口未被占用。

这是pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nevro</groupId>
    <artifactId>spring-training</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-theory training</name>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.6.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <properties>
     <java.version>1.8</java.version>
    </properties>

</project>

这是带有主要方法的Main类

package com.nevro;

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

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

也有一个控制器如下

package controller;

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

@RestController
public class HelloController {

    @RequestMapping("/hello")
    public String sayHi(){
        return "hi";
    }


}

任何原因以及如何解决此问题。

4 个答案:

答案 0 :(得分:1)

Spring Boot将自动检测com.nevro和子包中的所有bean。但是,您的控制器位于controller软件包中,因此将永远不会被检测到。将控制器移至com.nevro.controller软件包中,这将使Spring Boot能够检测到控制器,并有助于确定是否需要启动Web服务器。

也可能是依赖项之一没有正确下载。您可能要使用mvn dependency:purge-local-repository清除本地存储库,然后重建应用程序以重新下载依赖项。

答案 1 :(得分:0)

您可能缺少控制器,请尝试添加一个。我在下面提供了一个非常基本的示例。

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

@RestController
public class HelloController {

    @RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }
}
  

该类被标记为@RestController,这意味着Spring MVC可以使用该类来处理Web请求。 @RequestMapping将/映射到index()方法。从浏览器调用或在命令行上使用curl时,该方法返回纯文本。这是因为@RestController结合了@Controller和@ResponseBody这两个注释,它们导致Web请求返回数据而不是视图。

来源:Building an Application with Spring Boot

添加控制器后,重新启动应用程序并访问localhost:8080/,现在应该看到Greetings from Spring Boot!

答案 2 :(得分:0)

我认为问题出在您的控制器软件包:package controller;

您的主类位于其他软件包中:package com.nevro;,因此当Spring Boot尝试查找控制器时,它什么也找不到

答案 3 :(得分:-1)

通过在application.properties中添加以下行来尝试使用其他端口号:

server.port = 8088

如果仍然无法解决,请更改您安装的JDK版本。

对于Spring Boot 2,您需要jdk 9。