Как сделать свойства в файлах свойств обязательными в Spring? - PullRequest
8 голосов
/ 04 мая 2010

У меня есть файл 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 есть установщики для каждого пути.

Проблема в том, что когда некоторые из этих обязательных путей не определены, не выдается никакой ошибки. Как и где я должен решить эту проблему?

Ответы [ 3 ]

6 голосов
/ 04 мая 2010

Стандартное поведение 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" ... />.

1 голос
/ 04 мая 2010

Одним из способов усиления проверки параметров является переключение на классический bean-компонент PropertyPlaceholderConfigurer в вашем файле компонентов.

PropertyPlaceholderConfigurer имеет свойства, которые можно использовать для настройки его поведения.и укажите, выбрасывается ли исключение или нет, если какой-то ключ отсутствует (взгляните на setIgnoreUnresolvablePlaceholders или setIgnoreResourceNotFound).

Если я правильно помню, в Spring 2.5 поддерживается только атрибут location для<context:property-placeholder> (хотя все могло измениться).

0 голосов
/ 04 мая 2010

Я не уверен, полностью ли я понимаю вашу проблему, но, возможно, существуют различные способы решения этой проблемы. Можно было бы сделать пути обязательными, используя инжектор конструктора. В конструкторе вы можете затем проверить входящие значения, и, если, например, NULL, выбросить экземпляры BeanInitializationException.

...