当前位置: 首页 > 知识库问答 >
问题:

SpringBoot测试模块没有在正确的类路径中搜索log4j2配置

西门品
2023-03-14

我在SpringBoot项目中运行测试时遇到了一些问题。

项目结构如下:

项目结构图像

我可以毫无问题地启动resourceService,但是如果我尝试运行SpringBoot项目的标准测试.....

package com.pcsystem;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ResourceserviceApplicationTests {

    @Test
    public void contextLoads() {
    }

}

程序响应此错误:

Logging system failed to initialize using configuration from 'resourceservice/log4j2.xml'
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\resourceservice\resourceservice\log4j2.xml (Unable to find the specified classpath)

所以我试图将application.properties特定属性从

logging.config=resourceservice/log4j2.xml

logging.config=log4j2.xml

更改后,我注意到resourceserviceApplication无法启动,因为它找不到log4j2.xml:

Logging system failed to initialize using configuration from 'log4j2.xml'
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\log4j2.xml (Unable to find the specified classpath)

我已经尝试了很多方法来解决这个问题,做了很多研究,但目前我仍然被困在这里。

有什么想法吗?

ps:似乎Authorizationservice模块没有遇到同样的问题,只是因为我还没有在Authorizationservice的application.properties中设置logging.config属性(现在还不需要)

提前感谢,祝您度过愉快的一天。

-更新1-

配置文件是关于所有的资源服务模块,所以我已经完成了你说的Kostiantyn(感谢您的回复),但问题仍然存在。

实际情况:

回复后的项目结构

现在,resourceServiceApplication将不会启动,表示:

Logging system failed to initialize using configuration from 'log4j2.xml'
java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\log4j2.xml 

测试包中的contextLoads()方法说:

java.io.FileNotFoundException: C:\java\IntelliJ_projects\baseprojectoauth2\resourceservice\log4j2.xml 

让我向您展示配置文件:

server.port=8888

logging.config=log4j2.xml

spring.data.mongodb.host=localhost
spring.data.mongodb.database=jogging
#spring.data.mongodb.username=admin
#spring.data.mongodb.password=pass
spring.data.mongodb.port=27017

应用户1615664的要求,下面你可以看到我的gradle文件(那是关于resourceService模块的gradle文件;AuthorizationService有一个特定的梯度文件,最后还有一个根梯度文件,我将在本次更新结束时向您展示)

请原谅,我在这里使用了大量的库。

buildscript {
    ext {
        springBootVersion = '1.5.4.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    compile.exclude group:'ch.qos.logback'
}

dependencies {


    compile('org.springframework.boot:spring-boot-starter-data-mongodb')
    compile('org.springframework.boot:spring-boot-starter-security')

    compile('org.springframework.boot:spring-boot-starter-web') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        exclude module: "logback-classic"
    }
    compile('org.springframework.boot:spring-boot-starter-log4j2')

    compile group: 'org.apache.tika', name: 'tika', version: '1.16', ext: 'pom'
    compile group: 'org.apache.tika', name: 'tika-parsers', version: '1.16'
    compileOnly('org.projectlombok:lombok')

    compile("org.springframework.boot:spring-boot-starter-actuator")


    //compile project(':authorizationservice')
    // https://mvnrepository.com/artifact/org.springframework.hateoas/spring-hateoas
    compile group: 'org.springframework.hateoas', name: 'spring-hateoas', version: '0.23.0.RELEASE'
    // https://mvnrepository.com/artifact/org.springframework.security.oauth/spring-security-oauth2
    // https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.6'
    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.1.1.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-jwt', version: '1.0.8.RELEASE'

    // https://mvnrepository.com/artifact/org.apache.axis/axis
    compile group: 'org.apache.axis', name: 'axis', version: '1.4'
    // https://mvnrepository.com/artifact/axis/axis-jaxrpc
    compile group: 'axis', name: 'axis-jaxrpc', version: '1.4'

    // https://mvnrepository.com/artifact/commons-discovery/commons-discovery
    compile group: 'commons-discovery', name: 'commons-discovery', version: '0.5'
    // https://mvnrepository.com/artifact/org.slf4j/slf4j-api

    // https://mvnrepository.com/artifact/javax.xml/jaxrpc-api
    compile group: 'javax.xml', name: 'jaxrpc-api', version: '1.1.1'

    // https://mvnrepository.com/artifact/org.apache.xmlrpc/xmlrpc
    compile group: 'org.apache.xmlrpc', name: 'xmlrpc', version: '3.1.3', ext: 'pom'
    // https://mvnrepository.com/artifact/javax.activation/activation
    compile group: 'javax.activation', name: 'activation', version: '1.1.1'
    // https://mvnrepository.com/artifact/javax.mail/mail
    compile group: 'javax.mail', name: 'mail', version: '1.4.7'
    // https://mvnrepository.com/artifact/wsdl4j/wsdl4j
    compile group: 'wsdl4j', name: 'wsdl4j', version: '1.6.3'



    testCompile('org.springframework.boot:spring-boot-starter-test')
}

PS:可能没有价值,但在根模块(baseProjectOauth2)中,我们可以欣赏这个根gradle文件

group 'com.pcsystem'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

共有3个答案

韩征
2023-03-14

您可以尝试将值< code > class path:log4j 2 . XML 而不仅仅是< code>log4j2.xml放入application.properties(或application.y[a]ml)文件中。

包括该文件在内的所有资源都应该放在< code>src/main/resources中(application.properties文件也放在这里)。不考虑一些可能的例外。

如果你想要一个不同的测试日志记录配置,而不是你应该把改编的文件放在测试的资源目录(src/test/resources)内,但是如果你希望它们相同,那么你可以保持原样(仅在src/man/resources内部)

邵研
2023-03-14

我感到贪婪地回答我自己的问题,但我认为我已经解决了。

我做过这些事情:—

src
    main
    test
        java
        resources
            application.properties

在那个属性文件中,我只把这个设置

logging.config=log4j2.xml

我现在要说的就是“这里的说明性图像”

简单地说,我必须深入研究关于属性文件自动检测的spring结构(甚至gradle结构)

郤浩慨
2023-03-14

您的项目结构中缺少<code>src/test/resources

根据Gradle项目惯例,相应地放置您的配置文件,即创建src/test/resources并将文件放在那里,如果您的日志配置是测试专用的:

src
   test
      java
         ...
      resources
         log4j2.xml

或者,如果您的应用程序在实时运行期间将使用log4j2.xml中的日志记录配置(包含在. jar可交付文件中),请将此文件移动到src/main/Resources

这将使您的< code > logging . config = log4j 2 . XML 工作。

关于Gradle项目结构的进一步阅读

 类似资料:
  • 本文向大家介绍python添加模块搜索路径方法,包括了python添加模块搜索路径方法的使用技巧和注意事项,需要的朋友参考一下 1.函数添加 import sys sys.path sys.path.append("c:\\") 2.修改pythonpath(试不通) windows:PYTHONPATH 3.增加.pth文件(可以) site-packages或者python安装目录添加 xx.

  • 在我的Mac OS应用程序中,我包含了一个Python.framework(v 2.7),所以我将其添加到“链接框架”中作为必需。同样在应用程序中,我正在使用NSTask启动一个Python脚本,如下所示: 当我构建应用程序时,在Python脚本中检查它与一起使用的版本,它返回: [“/用户/...脚本路径.../内容/资源“,”/库/框架/Python.framework/Versions/2.

  • 例如,在我们的模式中,我们有: 大约有20个不同的领域。每个字段都复制到索引中: 为自定义域类型提供以下标记器: 更新示例JSON文档(内容为安全性而模糊)“ 字段和内容都是从真实数据中编辑的,但它给出了想法。字段名称和内容都是较长的单词。这是取自SOLR管理搜索界面。

  • 因此,我有一个虚拟环境,在那里我安装了软件包<code>实用程序<code>。我知道我安装了它,因为当我执行<code>pip安装utlity<code>并获得以下输出时: 要求已经满足:效用在。/anaconda 3/envs/splice buster/lib/python 3.5/site-packages(1.0) 这是的输出: ['', '/home/joel/anaconda3/env

  • 回到Jooq2.5,看起来可以通过FactoryOperations类设置PostgreSQL搜索路径,但Jooq3.5中没有该类。显然,FactoryOperations分为DSL和DSLContext,但我似乎找不到use(Schema)方法的结尾。如何在较新版本的jOOQ中设置PostgreSQL搜索路径?

  • 问题内容: 面对Jigsaw的相关更改,我似乎找不到任何信息,以了解是否仍然可以在运行时扫描所有可用的类(用于接口,批注等),就像Spring,Reflections和当前其他许多框架和库那样。类的加载方式。 编辑 :此问题是关于 扫描 实际的物理文件路径以查找类。另一个问题是关于动态 加载 类和资源。它是相关的,但 绝不是重复的 。 更新 :Jetty项目已经为此制定了标准化API的 JEP提案