Заставьте Spring заменить заполнители в другом типе файла (кроме конфигов Spring) - PullRequest
2 голосов
/ 12 октября 2010

Есть ли способ заставить spring (v.3.0) анализировать заполнители в файлах, которые не .properties?Я знаю, что могу написать свой собственный PropertyPlaceholderConfigurer, но я искал "более чистый" способ сделать это.

РЕДАКТИРОВАТЬ:

Чтобы быть более конкретным, чтоЯ действительно хочу сделать, это заменить заполнители, присутствующие в .sql файлах.Таким образом, значения заполнителей хранятся в .properties, а заполнители используются в .sql файлах.

Ответы [ 3 ]

5 голосов
/ 12 октября 2010
Компонент

A PropertyPlaceholderConfigurer заменит заполнители в других определениях компонента.В частности, он обновляет значения свойств bean-компонентов в определениях bean-компонентов ... до того, как bean-компоненты будут фактически созданы.Следовательно, если вы хотите использовать PropertyPlaceholderConfigurer для изменения SQL, этот SQL нужно будет встроить в значения свойств компонента.Этот класс не может заменить свойства в произвольных файлах.

Если вы хотите заменить заполнители в произвольных файлах, лучше подойдет класс PropertyPlaceholderHelper.Например, метод

String replacePlaceholders(String value, Properties properties)

заменит заполнители в value свойствами, взятыми из properties, возвращая переписанную строку.Вы можете легко адаптировать / обернуть это, чтобы заменить заполнители в файле.

2 голосов
/ 12 октября 2010

PropertyPlaceholderConfigurer может быть предоставлено с произвольным Properties объектом (через свойство properties).

0 голосов
/ 12 октября 2010

Я не знаю, используете ли вы maven, но если вы это сделаете, я бы использовал фильтрацию ресурсов , чтобы внедрить свойства в файлы sql во время развертывания (есть аналогичные решения для ant, также ) и пусть Spring * PropertyPlaceholderConfigurer использует те же файлы свойств во время выполнения. Таким образом, все находится там, где оно принадлежит (в конце концов, лучшее место для свойств - это файл .properties).

...