Spring IntelliJ IDEA 中的引导项目在重启后停止工作
Spring Boot project in IntelliJ IDEA stops working after reboot
这可能是一个新手问题,但我无法解决问题。
我使用 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;我可以按照说明用另一个记录器(例如 log4j2)替换 Logback 上的 Spring 依赖项,但是嵌入式 Tomcat 无法创建容器。
要重新开始工作,我必须从头开始重新创建项目。
能否请您指出正确的方向以查明实际问题?谢谢。
Post scriptum:我附上我的 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>
首先,与其手动添加 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 项目
中捆绑的版本冲突
希望这能解决您的问题。
这可能是一个新手问题,但我无法解决问题。
我使用 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;我可以按照说明用另一个记录器(例如 log4j2)替换 Logback 上的 Spring 依赖项,但是嵌入式 Tomcat 无法创建容器。
要重新开始工作,我必须从头开始重新创建项目。
能否请您指出正确的方向以查明实际问题?谢谢。
Post scriptum:我附上我的 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>
首先,与其手动添加 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 项目
中捆绑的版本冲突希望这能解决您的问题。