Реализация CustomSqlChange в Liquibase не работает - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть требование для реализации интерфейса CustomSqlChange во время выполнения моего сценария liquibase. Ниже приведена моя запись yaml changeSet:

changeSet: 
 customChange: 
  param: 
   _name: file
   _value: "/com/example/data/user.csv"
  _class: "com.example.MyClass"
  id: id
  author: abj
  failOnError: true

Реализация для MyClass выглядит следующим образом:

package com.example;

import liquibase.change.custom.CustomSqlChange;
import liquibase.change.custom.CustomSqlRollback;
import liquibase.database.Database;
import liquibase.exception.CustomChangeException;
import liquibase.exception.RollbackImpossibleException;
import liquibase.exception.SetupException;
import liquibase.exception.ValidationErrors;
import liquibase.resource.ResourceAccessor;
import liquibase.statement.SqlStatement;

public class MyClass implements CustomSqlChange, CustomSqlRollback  {


     //to hold the parameter value
    private String file;

    private ResourceAccessor resourceAccessor;


    @Override
    public String getConfirmationMessage() {
        return "Confirmation Message from Custom SQL Change";
    }

    @Override
    public void setUp() throws SetupException {

    }

    @Override
    public void setFileOpener(ResourceAccessor resourceAccessor) {
        this.resourceAccessor = resourceAccessor;
    }

    public String getFile() {
        return file;
    }

    public void setFile(String file) {
        this.file = file;
    }

    @Override
    public ValidationErrors validate(Database database) {
        return null;
    }

    @Override
    public SqlStatement[] generateStatements(Database database) throws CustomChangeException {
        return null;
    }

    @Override
    public SqlStatement[] generateRollbackStatements(Database database)
            throws CustomChangeException, RollbackImpossibleException {
        return null;
    }}

Мой сценарий с обычной жидкой фазой работает успешно. У меня есть точка останова в методе generateStatements, но поток никогда не доходит до точки останова. Ни один из регистраторов не печатается для определенного набора изменений во время запуска приложения. Я что-то пропустил?

1 Ответ

1 голос
/ 26 февраля 2020

Работает с небольшим изменением. Реализован CustomTashChange вместо CustomSqlChange. Кроме того, для некоторых внутренних бизнес-логик c требовался параметр с именем changeId . Код выглядит следующим образом:

yaml запись ChangeSet:

- changeSet:
    id: id
    author: abj
    changes:
    - customChange:
        class: com.example.MyClass
        params:
        - param:
            name: changeId
            value: id

И код для MyClass:

package com.example;

import liquibase.change.custom.CustomTaskChange;
import liquibase.database.Database;
import liquibase.exception.CustomChangeException;
import liquibase.exception.SetupException;
import liquibase.exception.ValidationErrors;
import liquibase.resource.ResourceAccessor;

public class MyClass implements CustomTaskChange  {

    private String changeId;

    public String getChangeId() {
        return changeId;
    }

    public void setChangeId(String changeId) {
        this.changeId = changeId;
    }

    @Override
    public String getConfirmationMessage() {
        return "Custom Task Change for "+this.getClass();
    }

    @Override
    public void setUp() throws SetupException {
    }

    @Override
    public void setFileOpener(ResourceAccessor resourceAccessor) {
    }

    @Override
    public ValidationErrors validate(Database database) {
        return null;
    }

    @Override
    public void execute(Database database) throws CustomChangeException {
        System.out.println("Code Flow comes Here");
    }}
...