【发布时间】:2016-06-20 17:12:32
【问题描述】:
我正在开发 DROPWIZARD MIGRATION 应用程序 [Dropwizard 0.7.0]。要使用 migration.xml 生成 db 结构,我正在为 Postgres 和 ORACLE 数据库运行 db migrate 命令。对于 Postgres,我能够成功生成数据库结构,但是当尝试使用 ORACLE 时,以下详细信息会出现异常
database:
# the name of your JDBC driver
# driverClass: org.postgresql.Driver
driverClass: oracle.jdbc.driver.OracleDriver
# the username
user: system
# user: postgres
# the password
password: Passw0rd
# the JDBC URL
# url: "jdbc:postgresql://192.168.1.130:5432/mydb"
url: "jdbc:oracle:thin:@192.168.1.130:1521/mydb"
# Hibernate dialect
# dialect: "org.hibernate.dialect.PostgreSQLDialect"
dialect: "org.hibernate.dialect.Oracle10gDialect"
# hibernate.connection.provider_class
connectionProviderClass: org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider
对于这些 oracle 设置,我遇到了以下异常
ERROR [2016-03-07 07:59:24,001] org.apache.tomcat.jdbc.pool.ConnectionPool: Unable to create initial connections of pool.
Exception in thread "main" java.lang.reflect.InvocationTargetException
! java.sql.SQLException: Validation Query Failed, enable logValidationErrors for more details.
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
! at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:715) [tomcat-jdbc-7.0.50.jar:na]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
! at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635) [tomcat-jdbc-7.0.50.jar:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
! at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486) [tomcat-jdbc-7.0.50.jar:na]
at java.lang.reflect.Method.invoke(Method.java:606)
! at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144) [tomcat-jdbc-7.0.50.jar:na]
at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:121)
! at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116) [tomcat-jdbc-7.0.50.jar:na]
Caused by: java.sql.SQLException: Validation Query Failed, enable logValidationErrors for more details.
! at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103) [tomcat-jdbc-7.0.50.jar:na]
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:715)
! at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127) [tomcat-jdbc-7.0.50.jar:na]
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:635)
! at io.dropwizard.migrations.CloseableLiquibase.<init>(CloseableLiquibase.java:17) [dropwizard-migrations-0.7.0.jar:0.7.0]
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:486)
! at io.dropwizard.migrations.AbstractLiquibaseCommand.openLiquibase(AbstractLiquibaseCommand.java:66) [dropwizard-migrations-0.7.0.jar:0.7.0]
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:144)
! at io.dropwizard.migrations.AbstractLiquibaseCommand.run(AbstractLiquibaseCommand.java:53) [dropwizard-migrations-0.7.0.jar:0.7.0]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
! at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76) [dropwizard-core-0.7.0.jar:0.7.0]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
! at io.dropwizard.cli.Cli.run(Cli.java:70) [dropwizard-core-0.7.0.jar:0.7.0]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:127)
! at io.dropwizard.Application.run(Application.java:72) [dropwizard-core-0.7.0.jar:0.7.0]
at io.dropwizard.migrations.CloseableLiquibase.<init>(CloseableLiquibase.java:17)
! at org.opensample.MyApplication.main(MyApplication.java:59) [classes/:na]
at io.dropwizard.migrations.AbstractLiquibaseCommand.openLiquibase(AbstractLiquibaseCommand.java:66)
! at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_45]
at io.dropwizard.migrations.AbstractLiquibaseCommand.run(AbstractLiquibaseCommand.java:53)
! at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_45]
at io.dropwizard.cli.ConfiguredCommand.run(ConfiguredCommand.java:76)
! at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_45]
at io.dropwizard.cli.Cli.run(Cli.java:70)
! at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_45]
at io.dropwizard.Application.run(Application.java:72)
! at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:121) [idea_rt.jar:na]
at org.opensample.Mypplication.main(MyApplication.java:59)
... 5 more
【问题讨论】:
-
“验证查询失败,启用 logValidationErrors 了解更多详情” - 那么您的验证查询是什么?当您遵循该建议时,您看到了什么?
-
我的 postgres 配置正在运行,但同样不适用于 Oracle。我对验证查询一无所知。
-
在代码中我没有提到 postgres 的验证查询,我很惊讶它正在工作,而相同的设置不适用于 oracle。添加以下语句后,即 dataSourceFactory.setValidationQuery("SELECT * FROM INFORMATION_SCHEMA.SYSTEM_TABLES");我进入下一步。现在我得到 ORA-00972: identifier is too long
-
Oracle 中没有
information_schema。您应该将其更改为select 1 from dual。另外:对于 Postgres 来说,这也是一个非常糟糕的验证查询。对于 Postgres,您应该将其更改为select 1。为什么每次要验证连接时都要阅读完整的system_tables内容?
标签: java oracle11g database-migration dropwizard