簡體   English   中英

找不到 class [de.flapdoodle.embed.process.config.IRuntimeConfig]

[英]Could not find class [de.flapdoodle.embed.process.config.IRuntimeConfig]

升級到 3.0.0 版本的嵌入式 MongoDB 后,出現以下異常。

我在build.gradle中使用以下內容。

testImplementation group: 'de.flapdoodle.embed', name: 'de.flapdoodle.embed.mongo', version: '3.0.0'

下面給出了例外情況。

Caused by: java.lang.ClassNotFoundException: de.flapdoodle.embed.process.config.IRuntimeConfig
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_261]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[na:1.8.0_261]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355) ~[na:1.8.0_261]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[na:1.8.0_261]
    at java.lang.Class.forName0(Native Method) ~[na:1.8.0_261]
    at java.lang.Class.forName(Class.java:348) ~[na:1.8.0_261]
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:284) ~[spring-core-5.2.10.RELEASE.jar:5.2.10.RELEASE]
    at org.springframework.util.ClassUtils.resolveClassName(ClassUtils.java:324) ~[spring-core-5.2.10.RELEASE.jar:5.2.10.RELEASE]

我在代碼下方提供。 我想在 spring 啟動的集成測試中使用嵌入的 mongoDB 用於 MongoDB 事務功能。

@Profile("test")
@ActiveProfiles("test")
public class TestMongoConfig1 implements InitializingBean, DisposableBean {

    MongodForTestsFactory factory = null;
    
    MongodConfig mongodConfig = MongodConfig.builder().version(Version.Main.PRODUCTION).build();

    MongodStarter runtime = MongodStarter.getDefaultInstance();

    MongodExecutable mongodExecutable = null;
    MongodProcess mongod = null;
    
    @Override
    public void destroy() throws Exception {
        mongodExecutable.stop();
        
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        mongodExecutable = runtime.prepare(mongodConfig);
        mongod = mongodExecutable.start();
    }
    
    @Bean(name = "test1")
    public MongoClient mongoClient() {
        MongoClient mongoClient = MongoClients.create();
        System.out.println("============================================");
        System.out.println(mongoClient);
        System.out.println("============================================");
        
        return mongoClient;
    }

}

首先,如果您使用的是@DataMongoTest ,則必須在build.gradle中使用以下依賴項,而不是其他依賴項。

implementation("org.springframework.boot:spring-boot-starter-data-mongodb")
testImplementation("de.flapdoodle.embed:de.flapdoodle.embed.mongo")

要使用嵌入式 MongoDB 進行測試,您必須使用以下可能有效的代碼段。

@Profile("test")
@ActiveProfiles("test")
@Configuration
public class TestMongoConfig1 implements InitializingBean, DisposableBean {

    private MongodExecutable executable;

    
    @Override
    public void afterPropertiesSet() throws Exception {

        IFeatureAwareVersion version = Versions.withFeatures(new GenericVersion("4.0.0"), 
         Version.Main.PRODUCTION.getFeatures());
        IMongoCmdOptions cmdOptions = new 
         MongoCmdOptionsBuilder().useNoPrealloc(false).useSmallFiles(false)
                .master(false).verbose(false).useNoJournal(false).syncDelay(0).build();
        int port = Network.getFreeServerPort();
        IMongodConfig mongodConfig = new MongodConfigBuilder().version(version)
                .net(new Net(port, Network.localhostIsIPv6())).replication(new Storage(null, "testRepSet", 5000))
                .configServer(false).cmdOptions(cmdOptions).build();
        MongodStarter starter = MongodStarter.getDefaultInstance();
        executable = starter.prepare(mongodConfig);
        executable.start();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM