gpt4 book ai didi

mysql - 部署在 ec2 上的 Spring war 文件显示连接到 rds 的 hibernate 持久性失败

转载 作者:行者123 更新时间:2023-11-29 22:22:16 25 4
gpt4 key购买 nike

我们公司有一个应用程序已托管在 Media Temple 上,此后我们将迁移到亚马逊 EC2。我已经完成了所有教程,并且 apache、php、mysql、java 和 tomcat7 运行得很好。另外,我已经能够使用 mysql 工作台连接到 rds 实例。

但是,当我将 war 文件上传到 tomcat 管理器时,我收到一条错误,指出无法连接到数据库。

这是 catalina.out 文件中错误的顶部

-----------------日志文件中的片段------------------------------------ -----------------

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>

--------------结束片段 ------------------------------ ---------------

Here is the database.properties that holds the info for applicationContext.xml

--------------------------------数据库.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

--------------------结束片段------------------------ ------------------

rds 有一个安全组,其中包含以下入站内容:MYSQL TCP 3306 0.0.0.0/0

目前,我的本地 tomcat7 以及我们现有的使用 tomcat7 的实时应用程序一切正常。所以我不确定错误在哪里。

  • 是在 ec2/rds 安全组级别吗?
  • 是否处于 hibernate/spring 持久化级别?
  • 是mysql用户级别吗?

任何人都可以帮忙,或者将我指向包含答案的现有帖子。我已经在 stackoverflow 上冲浪了几天,并决定问这个问题。

一个可能有帮助的提示是,在我们开始使用 ec2 之前,一位新开发人员在本地部署 war 时遇到了相同的错误。我们找到了一个解决方案,在他的系统中只有 mysql 用户名:root,没有密码,导致 war 文件工作。

所以,现在我再次看到此错误,但我无法在实时系统上设置没有密码的 root。

最佳答案

您的数据库 URL 设置为 localhost,如果您使用 RDS,则情况并非如此,您应该将其替换为 rds 控制台中提供的主机名(例如 dbname.somerandomchars.rds.eu-west...抱歉,我没有手头的例子,所以这是根据内存的猜测,顺序可能略有不同)。您还需要确保将数据库用户名和密码设置为 RDS 值。

另一件事,如果您的数据库可以从工作台访问,这是否意味着您选择了“公开访问”,如果是这样,您必须更改您的安全组,允许所有流量非常不安全,如果绝对必须是公开的,您应该使用安全组将范围缩小到有限的集合。

关于mysql - 部署在 ec2 上的 Spring war 文件显示连接到 rds 的 hibernate 持久性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com