一尘不染

Spring Boot-如果未设置属性,则检测并终止?

spring-boot

如果未在任何地方(在application.properties文件或其他属性源中)未设置必需的属性,Spring Boot
Web应用程序是否有任何方法在启动时中止?现在,如果该属性包含在另一个属性中,则看来Spring Boot只是避免了替换。

例如,在我的application.properties文件中,有以下一行:

quartz.datasource.url=jdbc:hsqldb:${my.home}/database/my-jobstore

现在,如果未在其他位置设置“ my.home”,则Spring Boot会将字面值设置为 “ jdbc:hsqldb:$ {my.home} /
database / my-jobstore”
(无替代)。

如果属性my.home未在其他任何地方设置,我希望应用程序无法启动。


阅读 243

收藏
2020-05-30

共1个答案

一尘不染

使用简单的带@Value(${my.home})注释字段创建一个bean 。-然后,Spring将尝试注入该值,并且将失败并因此在该值不存在时停止。


当然@Value(${my.home}) private String myHomeValue;,对于普通的(不是Boot的)Spring应用程序来说就足够了!但是我 不知道
Boot是否具有其他配置来处理丢失的值:如果存在其他故障管理,则可以在PostCreation方法中检查该值。

@Component
public static class ConfigurationGuard implements InitializingBean {

   @Value(${my.home})
   private String myHomeValue;

   /**
    * ONLY needed if there is some crude default handling for missing values!!!!
    *
    * So try it first without this method (and without implements InitializingBean)
    */
   public void afterPropertiesSet() {
      if (this.myHomeValue == null or this.myHomeValue.equals("${my.home}") {
          throw new IllegalArgumentException("${my.home} must be configured");
      }
   }

}
2020-05-30