【问题标题】:Spring boot mandatory environment variableSpring Boot 强制环境变量
【发布时间】:2022-01-25 06:37:51
【问题描述】:

我的设置没有合理的默认值;如果未提供设置,我希望我的应用程序拒绝启动。在 Spring Boot 中是否有一种自然的方式来实现这一点?

在我的application.yml 中,我使用这样的语法:

    mySetting: "${MY_ENV_VAR}"

如果我不设置 MY_ENV_VAR 环境变量,应用程序会继续启动并抛出一个有点模糊的错误。

是否有推荐的方式来表达我的意图,即此设置是强制性的?

【问题讨论】:

标签: spring-boot


【解决方案1】:

您可以使用@ConfigurationProperties注解来注册一个带有mySetting属性的类。

然后您可以将此属性标记为@NotNull。另见here

【讨论】:

  • 感谢您的提示。我尝试了这个,并将@Validated 添加到类中,Spring 仍然继续使用包含文字字符串myApp.${MY_ENV_VAR}mySetting 属性。
【解决方案2】:

通常你在application.yaml 中有一个属性,你需要在应用程序的某个地方作为字符串或整数或其他基本类型。

稍后您可以通过在组件中使用 @Value 在应用程序中使用该属性。

例如,以下代码是您需要此值的组件,您可以将组件标记为@Validated,以便考虑验证注释,然后在您需要使用值 mySetting 的特定属性上使用 @ 987654324@。非空白表示非空字符串,非空字符串。

如果验证失败,则组件初始化将失败,因此应用程序上下文将无法完成,并且启动将失败,并带有指向此属性的相对错误。

@Component
@Validated
public class MyComponent {

@NotBlank
@Value(${mySetting})
private String mySetting;

....

}

【讨论】:

  • 好的,有道理。这如何转化为环境变量?
  • @Doradus 在加载应用程序时使用上面的代码,您有 mySetting:"${MY_ENV_VAR}" 所以如果未设置环境变量,则属性将为空并且应用程序加载将失败
猜你喜欢
  • 2019-08-03
  • 1970-01-01
  • 2017-12-01
  • 2021-11-09
  • 2019-08-03
  • 2018-07-31
  • 2016-11-15
  • 2018-03-24
  • 2017-01-30
相关资源
最近更新 更多