问题描述
我正在将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)