我有一个带有以下节点的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。
问题是:当未定义某些必需路径时,不会引发任何错误。我应该如何以及在哪里处理这个问题?
答案 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
具有可用于调整其行为的属性,并指定在丢失某些键时抛出异常(请查看setIgnoreUnresolvablePlaceholders
或setIgnoreResourceNotFound
)
如果我没记错的话,在Spring 2.5中,只有<context:property-placeholder>
支持location属性(事情可能已经改变了)。
答案 2 :(得分:0)
我不确定我是否完全理解您的问题,但可能有多种方法可以解决这个问题。一种方法是使用构造函数注入使路径成为必需的。然后,在构造函数中,您可以验证传入的值,如果为null,则抛出BeanInitializationException实例。