2014-09-10 7 views
7

Grails 1.X와 Grails 2.X 사이의 어떤 지점에서 기본 연결 풀링 라이브러리가 commons-dbcp에서 tomcat-dbcp으로 변경되었습니다.Grails 2.3.6에서 대체 연결 풀 정의

이제 Grails 애플리케이션의 연결 풀링 라이브러리로 BoneCP 또는 HikariCP를 구성하려고합니다.

그러나 this answer은 Grails 1.X에만 적용되는 솔루션을 제공합니다.

나는 또한 this Gist을 찾았지만, 또 어떤 Grails 버전이 적용되는지 모르겠습니다.

그럼, Grails 2.3.6 응용 프로그램에서 사용자 정의 연결 풀을 정의 할 수 있습니까? 감사!

+0

Gist는 Grails의 모든 버전에서 작동해야합니다. –

+0

@JoshuaMoore 사실이지만, 더 이상 사용되지 않는 개별 Holder 클래스 대신에'grails.util.Holders'를 사용하도록 업데이트해야합니다. – rmlan

+0

@rmlan 동의하지만 접근 방식은 여전히 ​​동일합니다. –

답변

7

UPDATE : 당신이 실제로 HikariCP 지금이 돌보는되어 있기 때문에, 데이터 소스를 풀 없습니다 Grails의 말할 필요하므로 확인을 클릭합니다.

스위치를 켜 놓으면 내 앱에 이상한 연결이 보입니다. 대신 다음과 같이 말하십시오.

pooled = false 

그래, @ Joshua Moore가 맞습니다.

업데이트 된 Grails 메소드로 시도해 보았습니다. 이것은 내 resources.groovy 파일의 관련 섹션입니다. 내가 이해할 수있는 한 Datasource.groovy의 구성 값은 런타임에서 대상 런타임 환경이 확인 된 후 (development, test 또는 production) resources.groovy으로 가져옵니다. 그것은 거의이다 testproduction 환경 같은, 내 경우

// environment specific settings 
environments { 
    development { 
     dataSource_myapp1 { 
     pooled = false 
     username = "CONFIGURE_ME_EXTERNALLY" 
     password = "CONFIGURE_ME_EXTERNALLY" 
     driverClassName = 'oracle.jdbc.OracleDriver' 
     dialect = 'org.hibernate.dialect.Oracle10gDialect' 
     url = 'jdbc:oracle:thin:@MYDBHOST1:1521/MYSERVICEID1' 
     } 
     dataSource_myApp2 { 
     pooled = false 
     username = "CONFIGURE_ME_EXTERNALLY" 
     password = "CONFIGURE_ME_EXTERNALLY" 
     driverClassName = 'oracle.jdbc.OracleDriver' 
     dialect = 'org.hibernate.dialect.Oracle10gDialect' 
     url = 'jdbc:oracle:thin:@MYDBHOST2:1521/MYSERVICEID2' 
     } 
    } 
} 

:

def config = Holders.config 
def dataSources = config.findAll { 
    it.key.toString().contains("dataSource_") 
} 

dataSources.each { key, value -> 
    def ds = value 
    "${key}"(HikariDataSource, { bean -> 

    def hp = new Properties() 
    hp.username = ds.username 
    hp.password = ds.password 
    hp.connectionTimeout = 6000 
    hp.maximumPoolSize = 60 
    hp.jdbcUrl = ds.url 
    hp.driverClassName = ds.driverClassName 

    HikariConfig hc = new HikariConfig(hp) 
    bean.constructorArgs = [hc] 
    }) 
} 

는 그리고 이것은 관련 내 DataSource.groovy 구성 섹션입니다. 감사!

+0

오라클 드라이버를 어떻게로드하고 있습니까? 이 방법을 사용할 때 오류가 발생합니다. 앱이 resources.groovy가 실행될 때까지 오라클 드라이버가로드되지 않는 것 같습니다. 2016-02-19 09 : 07 : 10,767 [localhost-startStop-1] WARN util.DriverDataSource - 직접 인스턴스화를 시도하여 driverClassName = oracle.jdbc.OracleDriver가있는 등록 된 드라이버를 찾을 수 없습니다. – Scott

+0

스택 추적의 또 다른 오류 : [com.zaxxer.hikari.HikariDataSource]를 인스턴스화하지 못했습니다. 생성자가 예외를 throw했습니다. 중첩 예외는 com.zaxxer.hikari.pool.HikariPool $ PoolInitializationException : 풀 초기화 중 예외가 발생했습니다. HikariPool-0 - 연결을 사용할 수 없으며 6002ms 후 요청 시간이 초과되었습니다. – Scott