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

时间:2017-12-07 09:07:49

标签: maven tomcat spring-boot logback phoenix

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

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

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

我能够完美地运行项目;系统重启后(我在Windows上),会出现一连串的错误。首先是一个表示Logback之间冲突的异常:

2017-12-04 12:56:37.293 5

2017-12-04 15:40:02.593 15

我不想改变凤凰客户JAR;我能够按照说明用另一个记录器(例如log4j2)替换Logback上的Spring依赖项,但是嵌入式Tomcat无法创建容器。

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

请您指出正确的方向来确定实际问题?谢谢。

Post scriptum:我附上了我的pom.xml的内容,除了一些潜在的识别信息。

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.

1 个答案:

答案 0 :(得分:0)

首先,不要手动添加apache phoenix客户端(或任何其他依赖项),而应将它们添加到maven pom.xml中,以便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项目中捆绑的版本相冲突

希望这会解决您的问题。