首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用`@value`‘注释的字段在mongock配置中没有初始化

用`@value`‘注释的字段在mongock配置中没有初始化
EN

Stack Overflow用户
提问于 2022-06-19 12:17:01
回答 3查看 165关注 0票数 0

我需要确保使用mongock进行数据迁移。@ChangeUnit类保存迁移的逻辑。它有一个带有@Value注释的字段,该字段始终为null,即使我在application.properties中正确初始化了

代码语言:javascript
复制
mongock.migration-scan-package=my.package
login-secret=test

然后,MigrationConfiguration看起来如下:

代码语言:javascript
复制
@ChangeUnit(id = "test", order = "001", author = "test")
@RequiredArgsConstructor
@Configuration
public class InitUsersChangeLog {

  private final MyService service;
  private final MongoTemplate template;

  @Value("${login-secret}")
  private String LOGIN;

  @Execution
  public void initUser() {
    service.create(User.builder().login(LOGIN).build());
  }
}

主修班:

代码语言:javascript
复制
@EnableMongock
@SpringBootApplication
public class MailServiceApplication {...}

我的假设是,这个值没有正确地注入到MongockConfiguration bean中。我尝试在属性中手动配置bean (不使用mongock.gration-scan-Package=my.Package),但没有成功。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-06-27 14:22:21

由于Mongock目前不支持@Value注释,所以可以尝试从Environment bean中使用Environment方法。可以使用构造函数或Lombok注释注入与其他bean相同的环境bean。

你想要改变这一点:

代码语言:javascript
复制
@Value("your.key.property")

对此:

代码语言:javascript
复制
private final Environment env;
  
public void method(){
  env.getProperty("your.key.property")
}
票数 1
EN

Stack Overflow用户

发布于 2022-06-20 11:17:45

Mongock目前不支持通过字段o方法参数进行@value注入。我们将在未来版本5中的一个小版本中提供这一点,但我们还不能给出日期。

票数 0
EN

Stack Overflow用户

发布于 2022-07-14 09:21:18

扩展MichalJ的答案,这是绝对有效的。我想补充的是,changeUnits不是由Mongock通过Springboot检索的,而是由Mongock独立处理的。因此注释@Configuration、@Component等不会被考虑,它们甚至可能具有破坏性。

与此相关的是,这段代码不起作用,至少在不久的将来是不行的:

代码语言:javascript
复制
  @Value("${login-secret}")
  private String LOGIN;

首先,如前所述,Mongock目前不支持值,但第一种方法将要求构造函数参数具有该@Value("${login-secret}"),而不是在字段级别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72676815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档