IntelliJ IDEA 中的 Spring Boot 项目在重启后停止工作

Posted

技术标签:

【中文标题】IntelliJ IDEA 中的 Spring Boot 项目在重启后停止工作【英文标题】:Spring Boot project in IntelliJ IDEA stops working after reboot 【发布时间】:2018-05-21 08:09:25 【问题描述】:

这可能是一个新手问题,但我无法解决问题。

我使用 IntelliJ IDEA 中的 Spring Initializr 接口创建了一个基于 Spring Boot JAR 的 Maven 项目。它对Web和JDBC的依赖; Tomcat 的嵌入式实例用于运行该项目。

我还添加了一些其他 Maven 依赖项,这些依赖项在相关对话框中没有出现问题;我还手动添加了 Apache Phoenix 瘦客户端 JAR,其中包括 Logback 的副本(我无法让他们的 Maven 存储库工作,但我认为这与这个问题无关)。

我能够完美地运行该项目;系统重新启动后(我在 Windows 上),随之而来的是一连串错误。首先是一个异常,表明 Logback 之间存在冲突:

Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from [...]). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Log4jLoggerFactory.

我不想更改 Phoenix 客户端 JAR;我可以按照说明将 Spring 对 Logback 的依赖替换为另一个记录器(例如 log4j2),但是嵌入式 Tomcat 无法创建容器。

要重新开始工作,我必须从头开始重新创建项目。

能否请您指出正确的方向以查明实际问题?谢谢。

发布脚本:我附上了我的 pom.xml 的内容,除了一些潜在的识别信息。

<?xml version="1.0" encoding="UTF-8"?>
<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>[RETRACTED]</groupId>
    <artifactId>[RETRACTED]</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>[RETRACTED]</name>
    <description>[RETRACTED]</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </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-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

【问题讨论】:

你能发布你的 pom.xml @robjwilkins 完成 【参考方案1】:

首先,您应该将它们添加到您的 maven pom.xml 中,而不是手动添加 apache phoenix 客户端(或任何其他依赖项),以便 maven 在构建时解决依赖项。如果您的项目具有 maven 无法解决的依赖项,这是您需要解决的单独问题,但出于多种原因手动添加它们是不好的做法。

将phoenix客户端添加为依赖项后,您需要明确排除 slf4j-log4j12 和 log4j 作为依赖项声明的一部分。 XML 应该如下所示:

    <dependency>
        <groupId>org.apache.phoenix</groupId>
        <artifactId>phoenix-core</artifactId>
        <version>4.13.1-HBase-1.3</version>
        <exclusions>
            <exclusion>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

排除这些需要的原因是它们与 spring-boot 项目中捆绑的版本冲突

希望这能解决您的问题。

【讨论】:

我想使用 Phoenix Maven 存储库,但在向 4.13.1 版本添加依赖项时遇到了麻烦。从未尝试过以前的版本,因为无论如何它们在我的场景中都没有用。我不明白为什么,当项目是全新的(在 IntelliJ 中重新创建)时不会出现冲突,然后在重新启动后会发生冲突 在你的pom中添加依赖有什么问题?我尝试并重新创建了 log4j 错误,然后按照我的回答中的描述添加了排除项,它解决了问题 最初的建议是正确的:在 Maven 之外拥有依赖项会产生问题。特别是,如果您使用的是瘦客户端(正如我所做的那样),问题在于使用“胖 JAR”而不是 Maven 依赖项;添加正确的存储库后,日志错误消失。

以上是关于IntelliJ IDEA 中的 Spring Boot 项目在重启后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

IntelliJ IDEA 中的 Spring Boot 项目在重启后停止工作

IntelliJ IDEA打开Maven项目,Spring boot所有依赖红名,不可用

在Web应用和IntelliJ IDEA中使用Spring框架

怎样在intellij idea 上开发struts应用

Intellij idea thymeleaf 在 spring boot 项目中完成

intellij idea 怎么gradle创建spring boot