Spring引导配置:如何在引用时返回始终相同的随机值?

mis*_*tic 8 java configuration spring properties spring-boot

我有APP_ID应该随机生成的应用程序属性(UUID),并且对于整个 Spring Boot 应用程序应该具有相同的值。

我所做的是以下内容:我在application.properties文件中定义了APP_ID=${random.uuid}.

UUID 已成功创建,但是对于每个属性引用,@Value("${APP_ID}")我将获得不同的 UUID。

示例:在课堂上Foo我想使用appId

@Value("${APP_ID}")
private String appId;
Run Code Online (Sandbox Code Playgroud)

在课堂上,Bar我也想使用appId

@Value("${APP_ID}")
private String appId;
Run Code Online (Sandbox Code Playgroud)

但是,appIdinBar总是与appIdin不同Foo

我在这个线程中读到这种行为是正确的。

什么是正确的实现总是相同的APP_ID

mis*_*tic 6

一种方法是“将单个随机值绑定到带注释的 bean 中,然后使用该 bean 来配置需要相同值的任何其他内容”(正如wilkinsoa该线程中所建议的那样)。@ConfigurationProperties

这会产生一个application.properties文件:

app.id=${random.uuid}
Run Code Online (Sandbox Code Playgroud)

配置属性文件是:

@Configuration
@ConfigurationProperties(prefix = "app")
public class AppProperties {

  private String id;

  public String getId() {
    return this.id;
  }

  public void setId(String id) {
    this.id = id;
  }
}
Run Code Online (Sandbox Code Playgroud)

使用 id 的类:

@Component
public class DoStuff {

  private AppProperties appProperties;

  @Autowired
  public DoStuff(AppProperties appProperties) {
    this.appProperties = appProperties;
  }
}
Run Code Online (Sandbox Code Playgroud)