我有一个演示应用程序,展示了各种实践。它将数据插入 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>
好吧,仔细编辑了这个问题后,只剩下一个地方可以调查,所以我找到了问题所在。就在这里,如果对其他人有用的话。
在我的各种实验中,我在本地 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
它应该只存在于我的条件配置中。