如果属性中未提供@Value,是否不会失败?

时间:2018-11-01 17:42:06

标签: java spring spring-mvc spring-boot

我导入一个依赖项,该依赖项具有一些带有@Value字段的服务。在我的Spring Boot应用程序中,我不使用这些服务,但仍使用此依赖项中的其他一些类,现在,如果我运行应用程序,它将无法解析占位符,例如

  

原因:java.lang.IllegalArgumentException:无法解决   占位符'apn.authentication.token.teamId'的值   “ $ {apn.authentication.token.teamId}”

因此,要解决此问题,我必须在属性中定义值。我搜索了一个设置,以使我的应用不会因未知值而失败,但我找不到解决方法。

即使缺少值,是否可以让我的spring boot应用启动?还是应该排除我不使用的类(如果这是唯一的选择,怎么办?)?

2 个答案:

答案 0 :(得分:4)

您可以设置一些默认值,以便如果不存在该值,它将采用默认值

@Value("${apn.authentication.token.teamId: -99}")
private int teamId;

或 将值设置为空

@Value("${apn.authentication.token.teamId: #{null}}")
private Integer teamId;

答案 1 :(得分:1)

您可以将PropertySourcesPlaceholderConfigurer配置为在未知的占位符上不失败:

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
    propertySourcesPlaceholderConfigurer.setIgnoreUnresolvablePlaceholders(true);
    return propertySourcesPlaceholderConfigurer;
}

它不会失败,也不会去解决它。通常,优良作法是使未知属性失败(它们是属性,因为您的应用程序需要它们起作用),或者添加它们的默认值。如果您的配置对于应用程序的正常运行而言并不重要,则可以创建一个额外的配置文件并在运行时读取它。