Я создаю проект Spring-mvc (с использованием JPA и Hibernate для доступа к БД), который отлично работает локально, в моем корпусе разработчика, с локальной базой данных MySQL.
Теперь я пытаюсь разместить моментальный снимок на промежуточном сервере, чтобы мой клиент мог поиграть с ним, и у меня возникают проблемы.
Tomcat (после некоторой борьбы) развертывает мой военный файл без жалоб, и я могу получить ответ от приложения через браузер.
Когда я попадаю на свою главную страницу, которая находится за аутентификацией Spring Security, она перенаправляет меня на страницу входа в систему, которая отлично работает. У меня настроена безопасность для запроса информации о пользователе в базе данных, и это отлично работает. Фактически, изменение пароля в базе данных отражается в поведении формы входа в систему, поэтому я уверен, что она достигает базы данных и запрашивает user
стол.
После аутентификации мы переходим на первую «настоящую» страницу приложения, и я получаю сообщение об ошибке «сбой доступа к данным». Журнал консоли сервера получает эту строку (отредактированную):
ERROR org.hibernate.util.JDBCExceptionReporter - SELECT command denied to user
'myDbUser'@'localhost' for table 'asset'
Однако, если я перейду в MySQL из оболочки, используя точно такие же кредиты, у меня не возникнет проблем с выбором из asset
стол:
[development@tomcat01stg]$ mysql -u myDbUser -pmyDbPwd dbName
...
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.77, for redhat-linux-gnu (i686) using readline 5.1
Connection id: 199
Current database: dbName
Current user: myDbUser@localhost
...
UNIX socket: /var/lib/mysql/mysql.sock
--------------
mysql> select count(*) from asset;
+----------+
| count(*) |
+----------+
| 19 |
+----------+
1 row in set (0.00 sec)
Я разбил свои настройки доступа к MySQL, очистил пользователя и повторно запустил команды предоставления, настроил одну версию пользователя из localhost, а другую из%, убедившись, что разрешения сброшены ... Ничего. меняет поведение этой штуки.
Что дает?
Догадаться.
Оказывается, конфигурация базы данных, которую вы поместили в /src/main/resources/spring/database.properties, используется для подключения к базе данных, но схема, которую вы даете Roo, когда он выполняет «обратный инжиниринг базы данных», заполняется через все созданные Roo классы модели, которые используются для указания таблицы (schema.table) в запросах.
Имя базы данных промежуточного сервера отличается от имени в моем локальном ящике. Таким образом, имена таблиц, которые я использовал, заполненные именем схемы для моей локальной базы данных, были неправильными. MySQL выдает неубедительное сообщение об ошибке о том, что у него нет разрешения на SELECT, когда это происходит, но что на самом деле происходит, так это несоответствие имени схемы.
Самое быстрое, что можно было сделать, - это воссоздать мою базу данных на промежуточном сервере с именем, которое соответствовало имени в моем блоке разработчика. Это решило эту проблему.