Файл весенней войны, развернутый на ec2, показывает сбой персистентности гибернации при подключении к rds
У нашей компании есть приложение, которое было размещено в медиа-храме, и с тех пор мы переходим на amazon ec2. Я прошел все учебные пособия, и у меня отлично работают apache, php, mysql, java и tomcat7. Кроме того, я смог подключиться к экземпляру rds с помощью MySQL Workbench.
Однако, когда я загружаю файл war в менеджер tomcat, я получаю сообщение об ошибке, в котором говорится, что он не может подключиться к базе данных.
Вот вершина ошибки в catalina.out
файл
----------------- SNIPPET ИЗ ФАЙЛА ЛОГА ----------------------------- -----------
17:28:52.311 [http-bio-8080-exec-1] DEBUG o.s.b.f.s.DisposableBeanAdapter - Invoking destroy method 'close' on bean with name 'dataSource'
17:28:52.311 [http-bio-8080-exec-1] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Retrieved dependent beans for bean '(inner bean)#73e12051': [org.springframework.se
curity.access.method.DelegatingMethodSecurityMetadataSource#0]
17:28:52.311 [http-bio-8080-exec-1] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Retrieved dependent beans for bean '(inner bean)#3b35dc09': [(inner bean)#73e12051]
17:28:52.312 [http-bio-8080-exec-1] **ERROR o.s.web.context.ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in file [/var/lib/tomcat7/webapps/clearbox/WEB
-INF/classes/META-INF/spring/applicationContext.xml]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit
: persistenceUnit] Unable to build EntityManagerFactory**
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) ~[spring-beans-
4.0.3.RELEASE.jar:4.0.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.0
.3.RELEASE.jar:4.0.3.RELEASE]
.... И ТАК ДАЛЕЕ.....
SEVERE: The web application [/clearbox] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
**------------END SNIPPET FROM LOG FILE-----------------------------**
Here is the code from the applicationContext.xml it attempts to run
**--------------SNIPPET FROM applicationContect.xml----------------**
<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
<property name="driverClassName" value="${database.driverClassName}"/>
<property name="url" value="${database.url}"/>
<property name="username" value="${database.username}"/>
<property name="password" value="${database.password}"/>
<property name="testOnBorrow" value="true"/>
<property name="testOnReturn" value="true"/>
<property name="testWhileIdle" value="true"/>
<property name="timeBetweenEvictionRunsMillis" value="1800000"/>
<property name="numTestsPerEvictionRun" value="3"/>
<property name="minEvictableIdleTimeMillis" value="1800000"/>
<property name="validationQuery" value="SELECT 1"/>
</bean>
<bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
--------------- КОНЕЦ SNIPPET ------------------------------------------
Here is the database.properties that holds the info for applicationContext.xml
-------------------SNIPPET FROM database.properties ----------------
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc\:mysql\://localhost\:3306/clearboxdb
hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
database.username=MYUSERNAMEHERE
database.password=MYPASSWORDHERE
--------------------- КОНЕЦ SNIPPET --------------------------- ------------
В rds есть группа безопасности, которая имеет следующее для входящего: MYSQL TCP 3306 0.0.0.0/0
В настоящее время все работает на моем локальном tomcat7 и на нашем существующем живом приложении с tomcat7. Так что я не уверен, где ошибка.
- Это на уровне групп безопасности ec2/rds?
- Это на уровне зимней спячки / весенней настойчивости?
- Это на уровне пользователя MySQL?
Может кто-нибудь, пожалуйста, помогите, или укажите мне на существующий пост с ответом. Я уже пару дней занимаюсь поиском стека и решил задать этот вопрос.
Совет, который может помочь, - до того, как мы начали работать с ec2, новый разработчик получал ту же ошибку при локальном развертывании войны. Мы нашли решение, заключающееся в том, что для его системы только имя пользователя mysql: root без пароля вызывало работу файла war.
Итак, теперь я снова вижу эту ошибку, но я не могу установить рут без пароля в действующей системе.
1 ответ
URL вашей базы данных установлен на localhost, если вы используете RDS, это не так, вместо этого вы должны заменить его именем хоста, указанным в консоли rds (что-то вроде dbname.somerandomchars.rds.eu-west... Извините, я не иметь пример, чтобы передать, так что это предположение из памяти, это может быть немного другой порядок). Вам также необходимо убедиться, что вы установили имя пользователя и пароль БД для значений RDS.
Еще одна вещь, если ваша база данных доступна из рабочей среды, означает ли это, что вы выбрали "общедоступный", если вы хотите изменить свою группу безопасности, чтобы весь трафик был очень небезопасным, если он абсолютно публичный, вы должны использовать группы безопасности для сужения только ограниченный набор.