Spring Boot / REST - 示例代码在启动后终止

Posted

技术标签:

【中文标题】Spring Boot / REST - 示例代码在启动后终止【英文标题】:Spring Boot / REST - Sample Code Terminates After Launch 【发布时间】:2017-05-24 07:52:50 【问题描述】:

我只是试图运行示例代码(通过 STS IDE 作为 Spring Boot 应用程序),但它只是终止(并且没有发生错误)。从git下载的,没有修改。

构建 RESTful Web 服务 示例代码:https://spring.io/guides/gs/rest-service/ Git 仓库:git clone https://github.com/spring-guides/gs-rest-service.git

**注意:我尝试的一件事,将 [spring-boot-starter-tomcat] 放入我的 maven 依赖项并下载,但无济于事。

:: Spring Boot :: (v1.4.3.RELEASE)

2017-01-09 17:33:14.942 信息 5548 --- [主要] hello.Application : 启动应用程序 TDL05100504 与 PID 5548 (C:\wm_dev\gs-rest-service\complete\target\classes 由 marshw2 启动 在 C:\wm_dev\gs-rest-service\complete) 2017-01-09 17:33:14.946 信息 5548 --- [主]你好。应用程序: 没有活动配置文件集,回退到默认配置文件:默认 2017-01-09 17:33:15.043 信息 5548 --- [主要] s.c.a.AnnotationConfigApplicationContext : 刷新 org.springframework.context.annotation.AnnotationConfigApplicationContext@6dc17b83: 启动日期 [Mon Jan 09 17:33:15 EST 2017];上下文层次的根 2017-01-09 17:33:17.526 信息 5548 --- [主要] o.s.j.e.a.AnnotationMBeanExporter :为 JMX 注册 bean 启动时曝光 2017-01-09 17:33:17.553 INFO 5548 --- [ main] hello.Application : 启动的应用程序 在 3.224 秒内(JVM 运行 4.192) 2017-01-09 17:33:17.555 信息 5548 --- [线程 1] s.c.a.AnnotationConfigApplicationContext : 结束 org.springframework.context.annotation.AnnotationConfigApplicationContext@6dc17b83: 启动日期 [Mon Jan 09 17:33:15 EST 2017];上下文层次的根 2017-01-09 17:33:17.559 信息 5548 --- [线程 1] o.s.j.e.a.AnnotationMBeanExporter :取消注册 JMX 公开 关闭时的 bean

【问题讨论】:

尝试从 start.spring.io 下载一个 Spring Boot 示例并将您的代码添加到其中。 哪个示例代码?这里的问题应该是自包含的。发布链接是不够的,但您甚至没有这样做。 代码是否启动任何 WebServer 或其他具有保持进程运行的非守护线程的东西。发布你的主要方法。 我很抱歉。它是构建 RESTful Web 服务的主要示例。 spring.io/guides/gs/rest-service git clone github.com/spring-guides/gs-rest-service.git @KlausGroenbaek - 不,它只是试图公开一个端点,然后打印“Hello World”。我现在有问题中代码的链接。 【参考方案1】:

项目将按原样运行,因此您无需进行任何更改。在 src/main 下创建一个名为 resources 的文件夹。在该文件夹中添加一个名为 application.properties 的文件(或 application.yml,如果您更喜欢 yaml)。在此文件中添加一行,以提高日志记录级别以进行调试,您应该获得有关正在发生的事情的更多详细信息。

src/main/resources/application.properties

logging.level.org.springframework=DEBUG

这将产生大量信息,但应该足以向您展示发生了什么。

【讨论】:

我启动了春季伐木(如您所建议的那样),但在我看来,它没有发现任何可疑之处。结果在这里。 nomorepasting.com/getpaste.php?pasteid=40082 非常好奇。我的下一个建议是使用mvn package 构建超级jar,并通过java -jar target/gs-rest-service-0.1.0.jar 在命令行上运行它 您好,感谢您的反馈!我确实尝试过,输出(和行为)与我在 STS 中看到的相匹配。发生的一件有趣的事情是我不得不跳过测试(mvn install -DskipTests)。正常构建时,我通过字段'mockMvc' - org.springframework.test.web.servlet.MockMvc 表达了不满意的依赖关系。 嗯,这让我想知道您是否没有其他 Maven 问题。您可以尝试删除本地 maven 存储库并运行 mvn package,可能您的某些本地工件已损坏。 嗨,Lane,是的,已解决,感谢您的帮助!在进行 Maven 更新时,我已经尝试在 STS 中使用“强制更新快照/发布”选项,但看起来这实际上可能不起作用。但是,在文件资源管理器中物理删除 repo 确实起到了作用。【参考方案2】:

对我来说,这个问题是由我的 Maven 存储库损坏引起的。使用 STS 3.8.3,我在进行 Maven 更新时尝试“强制更新快照/发布”。这没有起作用。但是,在文件资源管理器中物理删除存储库(并重建)确实可以完成这项工作。

【讨论】:

【参考方案3】:

更改示例代码如下,它会正常工作:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.4.RELEASE</version>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

【讨论】:

以上是关于Spring Boot / REST - 示例代码在启动后终止的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring-Boot-REST 调用中获取用户信息?

Spring Boot Rest - OffsetDateTime 作为浮点数返回

JSON 返回嵌套数组而不是对象 [Spring boot + JPA + MySQL + REST]

使用 Spring Boot 从不同端口提供 REST API 和静态内容

spring boot rest webservice,如何改进干净的代码?

没有 Spring Boot 的 Spring Security JWT 示例