1

I am migrating off of mongobee to mongock so we can use Atlas. I've followed the commits on the suggested changes that have been merged into master and have modified CloudDatabaseConfiguration, DatabaseConfiguration, and InitialSetupMigration classes. I've also updated the pom to import the mongock 4.1.17 dependencies.

Running the app there seems to be no issues. I've tested the change log and everything operates as it should. When i run my tests, however, i am getting an error stating it cannot find the class 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;
        }
    
    }

Am I missing a test dependency or incorrectly included one?

M. Justin
  • 14,487
  • 7
  • 91
  • 130
Cam
  • 11
  • 1

0 Answers0