如何在Spring中强制要求属性文件中的属性?

时间:2010-05-04 10:55:28

标签: java spring error-handling javabeans

我有一个带有以下节点的ApplicationContext.xml文件:

<context:property-placeholder 
location="classpath:hibernate.properties, classpath:pathConfiguration.properties" />

它指定我的应用程序将使用这两个properties文件。

pathConfiguration.properties内,定义了一些路径,例如:

PATH_ERROR=/xxx/yyy/error
PATH_SUCCESS=/xxx/yyy/success

PathConfiguration bean为每个路径都有setter。

问题是:当未定义某些必需路径时,不会引发任何错误。我应该如何以及在哪里处理这个问题?

3 个答案:

答案 0 :(得分:6)

通过<context:property-placeholder ... />配置的PropertyPlaceholder的标准行为会引发异常,只要您不在某个地方配置该属性,就无法解析该属性。

对于你的情况,如果你有一个需要这样的属性的Bean,它将在无法解析值时失败。例如:

public class PropertiesAwareBean {

  @Value("${PATH_ERROR}")
  private String errorPath;

  String getErrorPath() {
    return errorPath;
  }

}

如果您想放松PropertyPlaceholder并且在无法解析属性时不使其抛出异常,您可以将PropertyPlaceholder配置为忽略不可解析的属性,例如<context:property-placeholder ignore-unresolvable="true" ... />

答案 1 :(得分:1)

加强参数验证的一种方法是切换到bean文件中的经典PropertyPlaceholderConfigurer bean。

PropertyPlaceholderConfigurer具有可用于调整其行为的属性,并指定在丢失某些键时抛出异常(请查看setIgnoreUnresolvablePlaceholderssetIgnoreResourceNotFound

如果我没记错的话,在Spring 2.5中,只有<context:property-placeholder>支持location属性(事情可能已经改变了)。

答案 2 :(得分:0)

我不确定我是否完全理解您的问题,但可能有多种方法可以解决这个问题。一种方法是使用构造函数注入使路径成为必需的。然后,在构造函数中,您可以验证传入的值,如果为null,则抛出BeanInitializationException实例。