java - spring data mongo - 没有定义名为 'mongoTemplate' 的 bean

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

我有一个 spring data mongo 存储库类

public interface MyRepository extends MongoRepository<FeedbackDTO, String> {
}

在测试配置中我使用了 EnableMongoRepositories 注释

@EnableMongoRepositories(basePackages={"com.mypackage.repository.mongodb"})
public class ServiceTestConfiguration {

当我尝试测试使用此存储库的服务类时,它抛出异常

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'mongoTemplate' is defined at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1175) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:284) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351) ~[spring-beans-4.2.4.RELEASE.jar:4.2.4.RELEASE] ... 57 common frames omitted

最佳答案

@EnableMongoRepositories 注解将在启动时触发存储库 bean 的创建,但您仍然需要注册一个 MongoDB 连接并创建注入(inject)这些存储库的 MongoTemplate 实例.查看Spring Data MongoDB documentation .这是一个例子:

@Configuration
@PropertySource({ "classpath:mongodb-data-source.properties" })
public class MongodbDataSourceConfig extends AbstractMongoConfiguration {

    @Autowired Environment env;

    @Override
    public String getDatabaseName(){
        return env.getRequiredProperty("mongo.name");
    }

    @Override
    @Bean
    public Mongo mongo() throws Exception {

        ServerAddress serverAddress = new ServerAddress(env.getRequiredProperty("mongo.host"));
        List<MongoCredential> credentials = new ArrayList<>();
        credentials.add(MongoCredential.createScramSha1Credential(
                env.getRequiredProperty("mongo.username"),
                env.getRequiredProperty("mongo.name"),
                env.getRequiredProperty("mongo.password").toCharArray()
        ));
        MongoClientOptions options = new MongoClientOptions.Builder()
            .build();
        return new MongoClient(serverAddress, credentials, options);
    }

}

关于java - spring data mongo - 没有定义名为 'mongoTemplate' 的 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35709718/

相关文章:

java - Ajax返回状态码200,成功函数未触发

java - 坚持@Transient

java - 无法将聚合查询从 mongodb 转换为 Spring Data MongoDb

javascript - 在nodejs中将现有对象查找到数组中

Node.js : which keys in req. 主体存在于模式中

java - Mongodb聚合框架对海量数据进行排序

java -/etc/timezone 在 anapsix/alpine-java :8_server-jre docker image 上不存在

java - 如何从同名的 Tapestry 文本字段中获取数据?

java - Spring :没有@Component 的@Autowired

java - 如何在 SQL 查询中安全地使用 * 作为通配符