1

我正在从 mongobee 迁移到 mongock,以便我们可以使用 Atlas。我已经关注了已合并到 master 中的建议更改的提交,并修改了 CloudDatabaseConfiguration、DatabaseConfiguration 和 InitialSetupMigration 类。我还更新了 pom 以导入 mongock 4.1.17 依赖项。

运行应用程序似乎没有问题。我已经测试了更改日志,一切正常运行。但是,当我运行测试时,我收到一条错误消息,指出它找不到类 org/springframework/data/mongodb/MongoDatabaseFactory。

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongockInitializingBeanRunner' defined in class path resource [com/ioi/helpdesk/gateway/config/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/mongodb/MongoDatabaseFactory
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:226)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)


    <dependency>
        <groupId>com.github.cloudyrock.mongock</groupId>
        <artifactId>mongock-spring-v5</artifactId>
        <version>4.1.17</version>
    </dependency>
    <dependency>
        <groupId>com.github.cloudyrock.mongock</groupId>
        <artifactId>mongodb-springdata-v3-driver</artifactId>
        <version>4.1.17</version>
    </dependency>

I have not changed the starter data dependency

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



 @Configuration
    @EnableMongoRepositories("com.ioi.helpdesk.gateway.repository")
    @Profile("!" + JHipsterConstants.SPRING_PROFILE_CLOUD)
    @Import(value = MongoAutoConfiguration.class)
    @EnableMongoAuditing(auditorAwareRef = "springSecurityAuditorAware")
    public class DatabaseConfiguration {
    
        private final Logger log = LoggerFactory.getLogger(DatabaseConfiguration.class);
    
        @Bean
        public ValidatingMongoEventListener validatingMongoEventListener() {
            return new ValidatingMongoEventListener(validator());
        }
    
        @Bean
        public LocalValidatorFactoryBean validator() {
            return new LocalValidatorFactoryBean();
        }
    
        @Bean
        public MongoCustomConversions customConversions() {
            List<Converter<?, ?>> converters = new ArrayList<>();
            converters.add(DateToZonedDateTimeConverter.INSTANCE);
            converters.add(ZonedDateTimeToDateConverter.INSTANCE);
            return new MongoCustomConversions(converters);
        }
    
        @Bean
        public MongockSpring5.MongockInitializingBeanRunner mongockInitializingBeanRunner(ApplicationContext springContext,
              MongoTemplate mongoTemplate,
              @Value("${mongock.lockAcquiredForMinutes:5}") long lockAcquiredForMinutes,
              @Value("${mongock.maxWaitingForLockMinutes:3}") long maxWaitingForLockMinutes,
              @Value("${mongock.maxTries:3}") int maxTries) {
    
            try {
                log.info("INITIALIZING MONGOCK!");
                SpringDataMongo3Driver driver = SpringDataMongo3Driver.withLockSetting(mongoTemplate, lockAcquiredForMinutes, maxWaitingForLockMinutes, maxTries);
                MongockSpring5.MongockInitializingBeanRunner runner = MongockSpring5.builder()
                    .setDriver(driver)
                    .addChangeLogsScanPackage("com.ioi.helpdesk.gateway.config.dbmigrations")
                    .setSpringContext(springContext)
                    .buildInitializingBeanRunner();
                log.info("MONGOCK INITIALIZED!");
                return runner;
            } catch(Exception e) {
                log.info("Error during Mongock initalization - " + ExceptionUtils.getStackTrace(e));
            }
            return null;
        }
    
    }

我是否缺少测试依赖项或错误地包含了一个?

4

0 回答 0