2014-10-29 79 views
0

如果這是重複的,請原諒我。我已經搜索和搜索。但是過去幾天裏,我有一些東西在困擾着我。我已經研究並沒有找到解決我的問題的解決方案。我正在研究一個需要訪問多個數據庫的應用程序。如果我只做一個數據庫並將其注入到具有數據源對象的代碼中,那麼對於我使用的任何數據庫來說它都可以。但是如果我嘗試添加另一個數據源,那就是問題何時開始。我曾嘗試將配置添加到datasource.groovy,並且我嘗試了「硬編碼」連接。使用grails連接到多個oracle數據源的問題

硬編碼方法

正如你所看到的,我用下面的各種方法試圖和所有給我的錯誤以下。 ojdbc6.jar加載正確,因爲我通過故意拼寫錯誤的驅動程序類名進行了驗證,並找到了類未找到的錯誤。

import java.sql.* 

def index(){ 
    ... 
    def db = [url:'jdbc:oracle:oci8:@someotherdatabase.whatever.com', user:'other_user', password:'other_pw', driver:'oracle.jdbc.OracleDriver'] 
    def sql = Sql.newInstance(db.url, db.user, db.password, db.driver) 
    //  Sql.loadDriver("oracle.jdbc.driver.OracleDriver") 
    //  Sql.loadDriver("oracle.jdbc.OracleDriver") 
    //  def sql2 = Sql.newInstance('jdbc:oracle:oci8:@someotherdatabase.whatever.com','other_user','other_pw','oracle.jdbc.driver.OracleDriver') 
    //  def sql = Sql.newInstance("jdbc:oracle:oci8:@someotherdatabase.whatever.com", "other_user", "other_pw", "oracle.jdbc.OracleDriver") 
    //  DriverManager.registerDriver(new oracle.jdbc.OracleDriver()) 
    //  Class.forName("oracle.jdbc.driver.OracleDriver") 
    //  Connection conn = DriverManager.getConnection('jdbc:oracle:oci8:@someotherdatabase.whatever.com','other_user','other_pw') 
    //  Sql sql = new Sql(conn) 
    ... 
} 

錯誤:

Error | 
2014-10-28 11:38:06,766 [http-bio-8080-exec-1] ERROR errors.GrailsExceptionResolver - SQLException occurred when processing request: [GET] /ApplicationPortal/home 
No suitable driver found for jdbc:oracle:oci8:@someotherdatabase.whatever.com. Stacktrace follows: 
Message: No suitable driver found for jdbc:oracle:oci8:@someotherdatabase.whatever.com 
    Line | Method 
->> 602 | getConnection in java.sql.DriverManager 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 185 | getConnection in  '' 
| 192 | index . . . . in com.myapp.HomeController$$EOu0LeDV 
| 200 | doFilter  in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
| 63 | doFilter . . in grails.plugin.cache.web.filter.AbstractFilter 
| 895 | runTask  in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run . . . . . in  '' 
^ 662 | run   in java.lang.Thread 

DataSource.groovy的配置方法

我已經在嘗試DataSource.groovy中不同的配置。目前這看起來是這樣的:

dataSource { 
    dialect = org.hibernate.dialect.Oracle10gDialect 
    driverClassName = 'oracle.jdbc.driver.OracleDriver' 
    pooled = true 
    properties { 
     maxActive = -1 
     minEvictableIdleTimeMillis=1800000 
     timeBetweenEvictionRunsMillis=1800000 
     numTestsPerEvictionRun=3 
     testOnBorrow=true 
     testWhileIdle=true 
     testOnReturn=true 
     validationQuery="SELECT 1 from dual" 
    } 
} 
hibernate { 
    cache.use_second_level_cache = true 
    cache.use_query_cache = false 
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 
    showsql = true 
} 

environments { 
    development { 
     dataSource { 
      url = "jdbc:oracle:oci:@database.whatever.com" 
      username="data_user" 
      password = "some_pw" 
     } 
     dataSource_task { 
      url = "jdbc:oracle:oci8:@someotherdatabase.whatever.com" 
      username="other_user" 
      password = "other_pw" 
     } 
    } 

} 

而且我收到錯誤。我不知道它爲什麼試圖使用h2數據庫。我需要它連接到oracle數據庫。

Error | 
2014-10-29 13:30:53,500 [localhost-startStop-1] ERROR pool.ConnectionPool - Unable to create initial connections of pool. 
Message: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
    Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Error | 
2014-10-29 13:30:53,547 [localhost-startStop-1] ERROR pool.ConnectionPool - Unable to create initial connections of pool. 
Message: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
    Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Error | 
2014-10-29 13:30:53,621 [localhost-startStop-1] ERROR pool.ConnectionPool - Unable to create initial connections of pool. 
Message: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
    Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Error | 
2014-10-29 13:30:53,634 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Error creating bean with name 'transactionManager_task': Cannot resolve reference to bean 'sessionFactory_task' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_task': Cannot resolve reference to bean 'hibernateProperties_task' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties_task': Cannot resolve reference to bean 'dialectDetector_task' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector_task': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
Message: Error creating bean with name 'transactionManager_task': Cannot resolve reference to bean 'sessionFactory_task' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_task': Cannot resolve reference to bean 'hibernateProperties_task' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties_task': Cannot resolve reference to bean 'dialectDetector_task' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector_task': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
    Line | Method 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Caused by BeanCreationException: Error creating bean with name 'sessionFactory_task': Cannot resolve reference to bean 'hibernateProperties_task' while setting bean property 'hibernateProperties'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'hibernateProperties_task': Cannot resolve reference to bean 'dialectDetector_task' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector_task': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Caused by BeanCreationException: Error creating bean with name 'hibernateProperties_task': Cannot resolve reference to bean 'dialectDetector_task' while setting bean property 'properties' with key [hibernate.dialect]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dialectDetector_task': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Caused by BeanCreationException: Error creating bean with name 'dialectDetector_task': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Caused by MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Caused by SQLException: Driver:[email protected] returned null for URL:jdbc:oracle:oci8:@someotherdatabase.whatever.com 
->> 303 | innerRun in java.util.concurrent.FutureTask$Sync 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 138 | run  in java.util.concurrent.FutureTask 
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker 
| 918 | run  in  '' 
^ 662 | run . . in java.lang.Thread 
Error | 
Forked Grails VM exited with error 

設置: Grails的2.3.7 的Oracle 11g

編輯: 與數據源方法的問題是不是與我有多少數據源使用。我必須處理這個名字。如果我只用一個datasouce作爲datasource_other,它會拋出錯誤。但數據源的作品。

回答

0

就數據源配置方法而言,我想到了一個。這是一個頭腦發熱的錯誤。我沒有將driverClassName添加到dataSource_task。

dataSource_task { 
    url = "jdbc:oracle:oci8:@someotherdatabase.whatever.com" 
    username="other_user" 
    password = "other_pw" 
    driverClassName = 'oracle.jdbc.driver.OracleDriver'// <- it needed this 
} 

我仍然想知道爲什麼硬編碼方法不工作壽。