среда, 19 сентября 2012 г.

Сбой кодировки где-то между Spring MVC и MySQL

Во время написания одного небольшого задания столкнулся с возмутительным недоразумением между Spring MVC и MySQL базой: внесенные данные никак не хотели быть в одной кодировке на всех страницах приложения и базы.
Я наблюдал нечитаемые символы в базе и на страницах броузера.
Проверка, перепроверка базы\классов (кодировка базы была нужная) ничего не дала.

Помог поиск в гугле.
Не помню как я нашел END TO END UTF-8 ENCODING USAGE WITH MYSQL AND SPRING
Но там было указание на причину проблеммы: класс, ответственный за соединение с базой (в моему случае bean на основе org.apache.commons.dbcp.BasicDataSource) не получил двух важных свойств - useUnicode и characterEncoding.
Расширение класса вместе с добавлением метода init() вида :


public class UTF8DataSource extends BasicDataSource {

public void init() {
addConnectionProperty("useUnicode", "true");
addConnectionProperty("characterEncoding", "UTF-8");
}

}

Конечно, bean должен быть чуть другой:

 bean id="..." class="...UTF8DataSource" ... 

Надеюсь, кому-то сбережет время.

Странно, что в http://www.springframework.org/schema/p нету нужного свойства (p:initialSize и p:maxActive для Connection Pool есть...).