代码之家  ›  专栏  ›  技术社区  ›  Paulo Guedes

如何使属性文件中的属性在spring中成为必需的?

  •  8
  • Paulo Guedes  · 技术社区  · 15 年前

    我有一个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 回复  |  直到 15 年前
        1
  •  6
  •   stefanglase    15 年前

    通过配置的PropertyPlaceHolder的标准行为 <context:property-placeholder ... /> 如果某个属性在某个地方需要时无法解析,则引发异常,只要不进行其他配置。

    对于您的情况,如果有一个bean需要这样的一些属性,那么当无法解析该值时,它将失败。例如:

    public class PropertiesAwareBean {
    
      @Value("${PATH_ERROR}")
      private String errorPath;
    
      String getErrorPath() {
        return errorPath;
      }
    
    }
    

    如果要放宽propertyplaceholder,并且在无法解析属性时不使其引发异常,则可以将propertyplaceholder配置为忽略此类无法解析的属性 <context:property-placeholder ignore-unresolvable="true" ... /> .

        2
  •  1
  •   user159088    15 年前

    加强参数验证的一种方法是切换到经典 PropertyPlaceholderConfigurer 你的豆子档案里有豆子。

    这个 PropertyPlaceholderConfigurer 具有属性,可用于调整其行为并指定在缺少某个键时是否引发异常(请查看 setIgnoreUnresolvablePlaceholders setIgnoreResourceNotFound )

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

        3
  •  0
  •   drekka    15 年前

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