Mongock changelog files executing in local system but not executing on server after deployment

137 Views Asked by At

Able to execute Mongock changelog files successfully in local but changelog files not executing when I am deploying application jar to the server . I am not getting any error as well. I can see mongockChangelog and mongockLock collections on server but changelog file not executing. That print statement also I am not able to see in logs.

I am not able to find out why my changelog files are not executing on server. I am using spring-mvc version 5.3.31 The above scenario is working fine in my local system when I am deploying jar in local tomcat. Below are my code:

buil.gradle

def mongockJarsVersion="5.3.2"
    implementation 'com.reflexis:ztm-mongock:1.0'
    implementation group: 'io.mongock', name: 'mongock-api', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongock-driver-api', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongock-driver-core', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongock-runner-core', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongock-standalone-base', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongock-utils', version: "${mongockJarsVersion}"
    implementation group: 'io.mongock', name: 'mongodb-v3-driver', version: "${mongockJarsVersion}"

    def mongockProfessionalJarsVersion="5.2.2"
    implementation group: 'io.mongock.professional', name: 'mongock-standalone', version: "${mongockProfessionalJarsVersion}"
    implementation group: 'io.mongock.professional', name: 'mongock-runner-common', version: "${mongockProfessionalJarsVersion}"
    implementation group: 'io.mongock.professional', name: 'mongock-api', version: "${mongockProfessionalJarsVersion}"

    implementation group: 'io.mongock', name: 'jwt-api', version: '1.0.3'
    implementation group: 'org.apache.maven', name: 'maven-artifact', version: '3.6.1'
    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.8.1'
    implementation group: 'org.javassist', name: 'javassist', version: '3.28.0-GA'
    implementation group: 'org.reflections', name: 'reflections', version: '0.10.1'
    implementation group: 'javax.inject', name: 'javax.inject', version: '1'
    implementation group: 'org.objenesis', name: 'objenesis', version: '3.2'

Changelog file

@ChangeLog
public class SystemCodeChangeLog {

    @ChangeSet(order="1", id="appVersionSystemCodes", author= MongockAppInitialization.MONGOCK_AUTHOR, runAlways=true)
    public void appVersionSystemCodes(MongoDatabase mongoDatabase) {
        System.out.println("SystemCodeChangeLog appVersionSystemCodes start...!");
        // insert code
    }
}

MongoAppInitialization

@MongockCliConfiguration(sources = RunnerBuilderProviderImpl.class)
public class MongockAppInitialization {

    public static String DATABASE_NAME = null;
    public final static String MONGOCK_CHANGE_LOG_COLLECTION_NAME = "mongockChangeLog";
    public final static String MONGOCK_SCAN_PACKAGE = "com.mongockengine.changelog";
    public final static String MONGOCK_AUTHOR = "ztm-engg";

    public static void initializeMongock() {
        try {
            System.out.println("MongockAppInitialization initializeMongock start...!");
           
            new RunnerBuilderProviderImpl(DATABASE_CONFIG, DATABASE_NAME,
                    MONGOCK_SCAN_PACKAGE)
                    .getBuilder()
                    .buildRunner()
                    .execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import io.mongock.driver.mongodb.v3.driver.MongoCore3Driver;
import io.mongock.runner.core.builder.RunnerBuilder;
import io.mongock.runner.core.builder.RunnerBuilderProvider;
import io.mongock.runner.standalone.MongockStandalone;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;
import org.bson.codecs.pojo.PojoCodecProvider;

import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
import static org.bson.codecs.configuration.CodecRegistries.fromRegistries;

public class RunnerBuilderProviderImpl implements RunnerBuilderProvider {
    private static String MONGODB_CONNECTION_STRING = null;

    private String MONGODB_MAIN_DB_NAME = null;
    private String MONGOCK_SCAN_PACKAGE = null;
    public RunnerBuilderProviderImpl(String MONGODB_CONNECTION_STRING, String MONGODB_MAIN_DB_NAME, String MONGODB_SCAN_PACKAGE) {
        this.MONGODB_CONNECTION_STRING = MONGODB_CONNECTION_STRING;
        this.MONGODB_MAIN_DB_NAME = MONGODB_MAIN_DB_NAME;
        this.MONGOCK_SCAN_PACKAGE = MONGODB_SCAN_PACKAGE;
    }

    @Override
    public RunnerBuilder getBuilder() {
        MongoClient client = getMainMongoClient();
        ClientSession session = client.startSession();
        // session.close()
        return MongockStandalone.builder()
                .setDriver(MongoCore3Driver.withDefaultLock(client, this.MONGODB_MAIN_DB_NAME))
                .addMigrationScanPackage(this.MONGOCK_SCAN_PACKAGE)
                .setMigrationStartedListener(MongockEventListener::onStart)
                .setMigrationSuccessListener(MongockEventListener::onSuccess)
                .setMigrationFailureListener(MongockEventListener::onFail)
                // create mongosession object
                // add dependency to pass client session and whatever object i've created.
                .addDependency("ClientSession", session)
                .setTrackIgnored(true)
                .setTransactionEnabled(true);
    }

    /**
     * Main MongoClient for Mongock to work.
     */
    private static MongoClient getMainMongoClient() {
        return buildMongoClientWithCodecs(MONGODB_CONNECTION_STRING);
    }

    /**
     * Helper to create MongoClients customized including Codecs
     */
    private static MongoClient buildMongoClientWithCodecs(String connectionString) {
        CodecRegistry codecRegistry = fromRegistries(CodecRegistries.fromCodecs(),
                MongoClientSettings.getDefaultCodecRegistry(),  fromProviders(PojoCodecProvider.builder().automatic(true).build()));

        MongoClientSettings.Builder builder = MongoClientSettings.builder();
        builder.applyConnectionString(new ConnectionString(connectionString));
        builder.codecRegistry(codecRegistry);
        MongoClientSettings build = builder.build();
        return MongoClients.create(build);
    }
}

server logs

SystemOut O [EVENT LISTENER] - Mongock STARTED successfully.
SystemErr R [Default Executor-thread-4] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:8, serverValue:1472262}] to tm-engg-dev-shard-00-02.nwuj5.mongodb.net:27017
SystemErr R [Default Executor-thread-4] INFO org.reflections.Reflections - Reflections took 140 ms to scan 1 urls, producing 2 keys and 2 values
SystemErr R [Default Executor-thread-4] INFO org.reflections.Reflections - Reflections took 1 ms to scan 1 urls, producing 2 keys and 2 values
SystemErr R [Default Executor-thread-4] INFO io.mongock.driver.core.lock.LockManagerDefault - Mongock trying to acquire the lock
SystemErr R [Default Executor-thread-4] INFO io.mongock.driver.core.lock.LockManagerDefault - Mongock acquired the lock until: Mon Jan 22 14:10:58 UTC 2024
SystemErr R [Thread-18] INFO io.mongock.driver.core.lock.LockManagerDefault - Starting mongock lock daemon...
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.system.SystemUpdateExecutor - Mongock starting the system update execution id[2024-01-22T14:09:57.053-954]...
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.ChangeLogRuntimeImpl - method[io.mongock.runner.core.executor.system.changes.SystemChangeUnit00001] with arguments: []
SystemErr R [Thread-18] INFO org.mongodb.driver.connection - Opened connection [connectionId{localValue:9, serverValue:1472263}] to tm-engg-dev-shard-00-02.nwuj5.mongodb.net:27017
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.ChangeLogRuntimeImpl - method[beforeExecution] with arguments: [io.mongock.driver.mongodb.v3.repository.Mongo3ChangeEntryRepository]
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.ChangeExecutorBase - APPLIED - {"id"="system-change-00001_before", "type"="before-execution", "author"="mongock", "class"="SystemChangeUnit00001", "method"="beforeExecution"}
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.ChangeLogRuntimeImpl - method[execution] with arguments: [io.mongock.driver.mongodb.v3.repository.Mongo3ChangeEntryRepository]
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.ChangeExecutorBase - APPLIED - {"id"="system-change-00001", "type"="execution", "author"="mongock", "class"="SystemChangeUnit00001", "method"="execution"}
SystemErr R [Default Executor-thread-4] INFO io.mongock.driver.core.lock.LockManagerDefault - Mongock waiting to release the lock
SystemErr R [Default Executor-thread-4] INFO io.mongock.driver.core.lock.LockManagerDefault - Mongock releasing the lock
SystemErr R [Default Executor-thread-4] INFO io.mongock.driver.core.lock.LockManagerDefault - Mongock released the lock
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.system.SystemUpdateExecutor - Mongock has finished the system update execution
SystemErr R [Default Executor-thread-4] INFO org.reflections.Reflections - Reflections took 2 ms to scan 1 urls, producing 0 keys and 0 values
SystemErr R [Default Executor-thread-4] INFO org.reflections.Reflections - Reflections took 2 ms to scan 1 urls, producing 0 keys and 0 values
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.operation.migrate.MigrateExecutorBase - Mongock skipping the data migration. There is no change set item.
SystemErr R [Default Executor-thread-4] INFO io.mongock.runner.core.executor.operation.migrate.MigrateExecutorBase - Mongock has finished
SystemOut O [EVENT LISTENER] - Mongock finished successfully
SystemOut O MongockAppInitialization initializeMongock end...!
[1/22/24 14:09:58:245 UTC] 00000039 SystemOut O IndexConfigSetup init end...!


0

There are 0 best solutions below