Spring Data 没有扫描我的 MongoDb 存储库,为什么?

问题描述 投票:0回答:1

我有一个演示应用程序,展示了各种实践。它将数据插入 MySQL 数据库和 MongoDb 数据库中。

它曾经在日志中显示这些行:

Bootstrapping Spring Data JPA repositories in DEFAULT mode.
Bootstrapping Spring Data MongoDb repositories in DEFAULT mode.

但是现在,经过各种更改(包括引入一些H2内存测试),它仅显示:

Bootstrapping Spring Data JPA repositories in DEFAULT mode.

并且我的 MongoDb 存储库未扫描。

据我所知,我的 MongoDb conf 没有改变,但可能添加一些 H2 依赖项或其他一些隐式更改禁用了 mongodb bootstrapping,如何恢复我的 MongoDb 扫描/引导?

这是我实际明显忽略的 MongoDb conf :

应用程序属性:

spring.jpa.open-in-view=false

spring.data.mongodb.authentication-database=admin
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=police-assurance-database

spring.jpa.properties.hibernate.globally_quoted_identifiers=true

MongoDB配置:

package fr.tristan.demoassurance.infrastructure.repository.mongodb.config;

import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;

import fr.tristan.demoassurance.infrastructure.repository.mongodb.PoliceAssuranceSpringDataMongoOrderRepository;

@EnableMongoRepositories(basePackageClasses = PoliceAssuranceSpringDataMongoOrderRepository.class)
public class MongoDBConfiguration {
}

PoliceAssuranceSpringDataMongoOrderRepository:

package fr.tristan.demoassurance.infrastructure.repository.mongodb;

import java.util.List;

import org.springframework.data.mongodb.repository.MongoRepository;

import fr.tristan.demoassurance.infrastructure.repository.mongodb.entity.PoliceAssuranceMongo;

public interface PoliceAssuranceSpringDataMongoOrderRepository extends MongoRepository<PoliceAssuranceMongo, Integer> {
    List<PoliceAssuranceMongo> findByNom(String nom);
}

从显示存储库未扫描的启动日志中提取:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'fr.tristan.demoassurance.infrastructure.repository.mongodb.PoliceAssuranceSpringDataMongoOrderRepository' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

我声明的依赖项:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
spring-boot spring-data spring-data-mongodb
1个回答
0
投票

好吧,仔细编辑了这个问题后,只剩下一个地方可以调查,所以我找到了问题所在。就在这里,如果对其他人有用的话。

在我的各种实验中,我在本地 H2 测试的情况下复制了 MongoDb conf 排除,它都在:

我的测试启动:

@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class, MongoRepositoriesAutoConfiguration.class, MongoDataAutoConfiguration.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class DemoAssuranceServiceIntegrationTest {

在我的条件下

application-local-test.properties

spring.autoconfigure.exclude= \
  org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration, \
  org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration, \
  org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, \
  org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration

它应该只存在于我的条件配置中。

© www.soinside.com 2019 - 2024. All rights reserved.