java - 在 spring-data-mongoDB 中创建 MongoTransactionManager bean 时出错

标签 java spring mongodb spring-boot spring-data-mongodb

我正在尝试使用 spring-data-MongoDB 在 MongoDB 中添加事务支持。但是我无法创建添加事务支持所必需的 MongoTransactionManager bean。

我的代码-

@Configuration
public class MongoTransactionsConfig extends AbstractMongoConfiguration{
    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    } 

    @Override
    @Bean
    public MongoClient mongoClient() {
        return new MongoClient("localhost", 27017);
    }

    @Override
    protected String getDatabaseName() {
        return "backend";
    }

}

我正在关注 https://spring.io/blog/2018/06/28/hands-on-mongodb-4-0-transactions-with-spring-data

这是我收到的错误-

java.lang.IllegalStateException: Failed to introspect Class [com.observeai.platform.integration.backend.da.config.MongoTransactionsConfig] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:659) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:556) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:541) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.util.ReflectionUtils.getUniqueDeclaredMethods(ReflectionUtils.java:599) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:726) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:667) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:635) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1489) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:420) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:390) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:511) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1198) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE]
at org.springframework.boot.SpringApplication.getExitCodeFromMappedException(SpringApplication.java:889) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.getExitCodeFromException(SpringApplication.java:875) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.handleExitCode(SpringApplication.java:861) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:810) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at com.observeai.platform.integration.backend.web.App.main(App.java:18) [classes/:na]
Caused by: java.lang.NoClassDefFoundError: org/springframework/data/mongodb/MongoTransactionManager
at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_141]
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) ~[na:1.8.0_141]
at java.lang.Class.getDeclaredMethods(Class.java:1975) ~[na:1.8.0_141]
at org.springframework.util.ReflectionUtils.getDeclaredMethods(ReflectionUtils.java:641) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE]
... 20 common frames omitted

Caused by: java.lang.ClassNotFoundException: org.springframework.data.mongodb.MongoTransactionManager
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_141]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_141]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335) ~[na:1.8.0_141]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_141]
... 24 common frames omitted

我使用的版本 -

MongoDB - 4.0.0

Spring Data MongoDB - 2.1.0.RC1

MongoDB 驱动程序 - 3.8.0

最佳答案

成功支持的版本。使用 Spring boot 版本 2.1.5.RELEASE 请从 MongoDB Java Driver 下载最新的 MongoDB Java 驱动程序或者使用下面的 maven 依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.10.2</version>
</dependency>

Spring 数据 MongoDB

<dependency>
   <groupId>org.springframework.data</groupId>
   <artifactId>spring-data-mongodb-parent</artifactId>
   <version>2.1.8.RELEASE</version>
   <type>pom</type>
</dependency>

MongoDB:4.0.9

关于java - 在 spring-data-mongoDB 中创建 MongoTransactionManager bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779075/

相关文章:

node.js - Mongoose populate() 返回填充文档的 '_id' 字段,值为 "new ObjectId()"

java - 如何移动矩阵中的元素组?

java - 使用 Elastic Beanstalk 上的 catalina.out 缓解存储问题

java - 为 ssl 通信导入证书

java - HTTP 状态 404 : The requested resource is not available/Tomcat7

java - @ResponseBody 注解在响应中重置 header

java - Spring ModelMap 实现

mongodb - 如何通过相应文档的数组获取每个组的字段最大值?

mongodb - Mongo block 上的内联映射/减少吗?

java - 如何通过 Java 使用 Selenium 在 Instagram 中定位带有文本 Not Now 的元素