2012-06-26 4 views
0

Я нахожусь на основных этапах написания Spring3 MVC webapp с Hibernate. Я хочу, чтобы все классы моделей данных могли получать доступ к базовым значениям конфигурации, например, имя префикса таблицы базы данных и т. Д. Я хочу эту опцию, поэтому я (или другие разработчики) могу изменить ситуацию «на лету», изменив их в .properties файл.Как загрузить настройки приложения во время запуска (для Spring3 webapp)?

Могу ли я создать класс Config в пакете утилиты со статическим блоком, который загружает кучу свойств из файла .properties? Я полагаю, что сам класс может быть статичным с множеством геттеров для доступа к значениям внутри.

Если я выберет метод выше, как я могу застраховать приложение от загрузки (не удалось), если по какой-либо причине указанный файл .properties не был загружен? С исключениями?

Если мой путь воняет, что может быть лучшим сценарием?

Спасибо!

ответ

1

Это прекрасный подход ИМХО. Если вы явно объявить компонент для данного класса, как

<bean id="myConfig" class="com.yourcompany.yourproject.Config"/>

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

если -дль некоторых Reason-вы включили отложенную загрузку глобально вы должны явно отключить его для данного компонента, в противном случае вы не получите FailFast Раствора

<bean id="myConfig" class="com.yourcompany.yourproject.Config" lazy-init="false"/>

EDIT : Другая приятная особенность этого сценария заключается в том, что вы можете сказать maven «фильтровать» ресурс (файл .properties), и вы можете получить все переменные maven. Вот как выглядит мой файл prop (я использую эту информацию для диалога «О программе». Кто-нибудь когда-нибудь открывает диалоговое окно about?)

project.version=${project.version} 
project.name=${project.name} 
project.organization.name=${project.organization.name} 
project.url=${project.url} 
project.description=${project.description} 
+0

Это приятно. После исключения в инициализатор конфигурации, пружина автоматически отключается, или я должен поймать исключение и сделать system.exit? Извините за путаницу - я еще не совсем так дожил до весны, я все еще на уровне ORM. –

+0

Он будет обработан весной. Если это сервер приложений, тогда развертывание приложения не удастся, если это автономное приложение, оно будет завершено. –

+0

app-server ... да, звучит интересно .. какие-нибудь хорошие чтения на этом? –

Смежные вопросы