我已經設置了一個訪問遠程Oracle數據庫的Spring項目,但前提是我在本地Tomcat上運行了這個Spring項目。如果我部署到CF無論是作爲的JavaWeb或Spring項目,我總是得到同樣的錯誤信息:使用JDBC連接到外部Oracle數據庫
根源
org.springframework.transaction.CannotCreateTransactionException: 無法打開JPA EntityManager的事務;嵌套的例外是 javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException:無法打開連接 org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:3 ....
這是我的配置:
<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource">
<property name="driverType">
<value>oracle.jdbc.driver.OracleDriver</value>
</property>
<property name="URL">
<value>${jdbc.url}</value>
</property>
<property name="user">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource">
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="true"
p:generateDdl="true">
</bean>
</property>
<property name="jpaProperties">
<value>
hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy
hibernate.dialect=${hibernate.dialect}
hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}
</value>
</property>
</bean>
我試着使用,而不是oracle.jdbc.driver.OracleDriver oracle.jdbc.OracleDriver我試着使用<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"...
,與相應的屬性名稱。此外,我已經試過:
<bean id="dataSource" class="org.springframework.jdbc.datasource.SingleConnectionDataSource">
<property name="driverClassName">
<value>${database.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
<property name="suppressClose" value="true"/>
<property name="autoCommit" value="true"/>
</bean>
和
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${database.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
沒有什麼工作,我總是得到同樣的錯誤。
我試着使用HSQL與此配置
這些jdbc.properties:
# HSQL
database.driverClassName = org.hsqldb.jdbcDriver
#jdbc.url = jdbc:hsqldb:file:target/zktodo2test.dat
jdbc.url = jdbc:hsqldb:file:zktodo2test.dat
jdbc.username = sa
jdbc.password =
hibernate.dialect = org.hibernate.dialect.HSQLDialect
hibernate.hbm2ddl.auto = update
...和它的工作但是當使用這些jdbc.properties:
# Oracle Credentials
database.driverClassName = oracle.jdbc.OracleDriver
jdbc.url = jdbc:oracle:thin:@dev.example.com:1521:dev
jdbc.username = epvin
jdbc.password = my_password
hibernate.dialect = org.hibernate.dialect.OracleDialect
hibernate.hbm2ddl.auto = update
我得到上面提到的錯誤。
您是否確認通過打印設置爲debug的spring軟件包的日誌級別的數據源屬性來查看登錄名/密碼是否被正確替換? – Vikdor
在您的情況下,始終將應用程序部署爲JavaWeb而不是Spring,因爲後者將重新編寫數據源屬性。你應該知道這裏的文檔:http://docs.cloudfoundry.com/frameworks/java/spring/spring.html。正如Vikdor所問,打印這些屬性的值是一個好主意。 –
我已經用實際值替換了$ {jdbc.values}。所以這些值應該是正確的。此外,我還添加了William給我的頁面中缺少的指令。還是一樣的錯誤。 – Alex