如何在Mongock变更日志中注入没有接口的bean

问题描述

我正在将Spring Boot应用程序从2.2.2迁移到2.2.3。我还将mongock升级到4.1.16,因为到目前为止使用的2.0.2版本已不再兼容。

我有这个变更日志,它在2.0.2中工作正常,但在4.1.16中却不行:

(event)

在4.1.16版本中,我有一个例外,因为ObjectMapper不是接口(com.fasterxml.jackson.databind.ObjectMapper):

    @ChangeSet(order = "001",id = "initDatabaseParametre",author = "xxxxx")
    public void initDatabaseParametre(ParametreManager parametreManager,ObjectMapper mapper) throws IOException 
        // someting
    }

我的变更日志中需要ObjectMapper,因为我的迁移过程会读取json文件

解决方法

正如您在Using custom beans in changeSet methods section,in the Mongock's documentation中看到的那样,您在changeSet中使用的自定义bean必须是接口。

Here有一些解释。

但是,您可以告诉Mongock您不想要那个。侵入性较小的机制是通过向您的changeSet参数添加注释@NonLockGuarded,如this section中所述。

该方法的缺点是,每次在所有changeSet中使用该bean时,都需要添加注释。也许更方便但也更具侵入性的方法是,将相同的注释添加到bean的类型中,在本例中为ObjectMapper,如this section中所述。

我假设这是杰克逊的ObjectMapper,而不是所有这些,您可以将SpringContext作为参数并从中获取ObjectMapper bean,但出于显而易见的原因,它不是理想的(这适用于任何一种bean)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...