MessageResourceBundle в Spring
2 февраля 2006
Когда пишешь resource bundle для Web-приложения часто мешает:
- что для обновления текста на страницах нужно перегружать приложение
- надо конвертить текст написанный по русски в Unicode.
Т.е. дергаем всякие native2ascii или Ant'ом пересобираем и перезапускам приложение.
А в Spring Framework есть замечательный класс ReloadableResourceBundleMessageSource, который решает все эти проблемы.
Пишем в spring.xml:
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/messages/messages</value>
</list>
</property>
<property name="useCodeAsDefaultMessage" value="true"/>
<property name="defaultEncoding" value="Windows-1251"/>
<property name="cacheSeconds" value="5"/>
</bean>
Теперь Spring читает файлики /WEB-INF/messages/messages.properties, /WEB-INF/messages/messages_ru.properties и т.д. Если к моменту запроса они обновились, то перечитывает заново. И к томуже читает в указанной кодировке, что избавляет нас от запуска всяких лишних программ.

февраля 15, 2006 в 16:08
Как такую настройку кодировки сделать в spring для DriverManagerDataSource или как то по другому, чтоб в базу знаки вопроса не писались на русском
февраля 16, 2006 в 08:01
DriverManagerDataSource я не использовал, считаю что к базе нужно коннектится через пул, а не создавать коннекцию каждый раз.
Но вообще там будет также как везде, т.е. зависеть от базы
возможно к url базы надо дописать ?useUnicode=true
Я обычно пользую Hibernate, там это решается параметром <prop key="hibernate.connection.useUnicode">true</prop>
февраля 16, 2006 в 08:25
Спасибо за отклик.
Я использую iBatis, не знаете, как там параметр прописать по кодировке?
Да и еще встречный вопрос, а что если я использую, как dataSource DriverManagerDataSource и втыкаю его в iBatis механизма там нет пула? какой пул вы используете для Spring? спасибо
февраля 16, 2006 в 08:30
Да забыл я использую MySql 5
февраля 16, 2006 в 08:39
С iBatis совершенно не знаком. Но думаю ему тоже можно подсунуть пул созданный в другом месте.
Я создаю пул из apache commons dbcp
или можно брать датасурс из jndi, сконфигурив его c нужной кодировкой в контейнере.
а потом этот dataSource подсовываю хибернейту. Наверное и iBatis так может принимать сурс.
Догадываюсь что база у вас mySQL, т.к. я только в ней сталкивался с проблемами кодировки. Postgres и Oracle без дополнительных настроект у меня хранили русский текст.
февраля 16, 2006 в 08:44
Огромное спасибо, я подсунул параметры для url базы
?Unicode=true&characterEncoding=cp1251 и все стало ок.
Я думаю такая запись не считается проблемной, как вы считаете?
Т.е. DriverManagerDataSource не имеет пула, а BasicDataSource, считается, как пул?
февраля 16, 2006 в 08:50
Если DriverManagerDataSource это который вместе со Spring идет, то он не пул, там в API выделено NOTE: This class is not an actual connection pool; it does not actually pool Connections.
А BasicDataSource это как раз из апачевской библиотеки пулов к базе.
февраля 16, 2006 в 08:52
Огромное спасибо!!!!!!!!
февраля 16, 2006 в 13:21
Возник еще параллельный вопрос. Вы при добавлении новой записи новый Id получаете сами из своей таблицы sequens, т.е. не автоматически база сама дает id для новой записи?
апреля 19, 2007 в 05:10
Спасибо!!!!
Замечу, что «Note that the base names set as the „basename“ and „basenames“ properties are treated in a slightly different fashion than the „basename“ property of ResourceBundleMessageSource. It follows the basic ResourceBundle rule of not specifying file extension or language codes, but can refer to any Spring resource location (instead of being restricted to classpath resources)» (Spring API) Обратите на это внимание, если придется переделывать из обычного ResourceBundleMessageSource.
июля 5, 2007 в 16:32
Добрый день
Вы сможете проконсультировать по iBatis ?
июля 5, 2007 в 16:43
Да нет, с iBatis я не знаком.
июля 6, 2007 в 07:57
Может посоветуете к кому братиться?
июля 9, 2007 в 15:47
Доюрый вечер.
Помогите пожалуйста очень срочный вопрос.
Как использовать библиотеки Spring? нужна только часть биндинга
т.е. что в JSP прописываались данные через
июля 15, 2007 в 11:10
Странно, но аброкадабра после смены ResourceBundleMessageSource на ReloadableResourceBundleMessageSource с русскими буквами так и осталась. Не подскажете, с чем это может быть связано?