Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JDBC连接到外部Oracle数据库_Oracle_Spring_Jdbc_Cloud Foundry - Fatal编程技术网

使用JDBC连接到外部Oracle数据库

使用JDBC连接到外部Oracle数据库,oracle,spring,jdbc,cloud-foundry,Oracle,Spring,Jdbc,Cloud Foundry,我已经设置了一个可以访问远程Oracle数据库的Spring项目,但前提是我在本地Tomcat上运行这个Spring项目。如果我将其作为JavaWeb或Spring项目部署到CF,我总是会收到相同的错误消息: 根本原因 org.springframework.transaction.CannotCreateTransactionException: 无法为事务打开JPA EntityManager;嵌套异常是 javax.persistence.PersistenceException: org

我已经设置了一个可以访问远程Oracle数据库的Spring项目,但前提是我在本地Tomcat上运行这个Spring项目。如果我将其作为JavaWeb或Spring项目部署到CF,我总是会收到相同的错误消息:

根本原因

org.springframework.transaction.CannotCreateTransactionException: 无法为事务打开JPA EntityManager;嵌套异常是 javax.persistence.PersistenceException: org.hibernate.exception.genericjdbception:无法打开连接 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>
…和它起作用了,但在使用这些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
# 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

我收到了上面提到的错误。

这是一个奇怪的Oracle特定身份验证问题。对运行在同一台服务器上的MySQL服务进行身份验证可以正常工作。

您是否通过打印数据源属性并将spring package的log level设置为debug来确认,以查看是否正确替换了登录名/密码?在您的情况下,始终depl将应用程序改为JavaWeb而不是Spring,因为后者将重新写入数据源属性。您应该注意此处的文档:。正如Vikdor所问,最好打印出这些属性的值。我已替换了${jdbc.values}按实际值。因此,值应该是正确的。此外,我添加了William给我的页面中缺少的指令。仍然是相同的错误。嘿,用实际值替换不会有帮助。属性值将由CF重新配置。更具体地说,您可能需要阅读此部分的文档:嘿,在这种情况下,您是否尝试depl连接到本地服务器并连接到同一Oracle数据源进行测试?
# 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
# 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