UPDATE: OK, so dass Sie tatsächlich benötigen, um Grails zu sagen nicht die Datenquellen zu bündeln, da HikariCP jetzt Sorge dafür zu nehmen ist.
Ich sah Verbindung Verrücktheit in meinen Apps, wenn ich das eingeschaltet habe. Also statt sagen:
pooled = false
OK ja, @Joshua Moore hat Recht.
Ich habe versucht, es mit aktualisierten Grails-Methoden zu tun, und dies ist der relevante Abschnitt meiner resources.groovy
Datei. Soweit ich das verstehe, werden die Konfigurationswerte in Datasource.groovy
zur Laufzeit in resources.groovy
gezogen, nachdem die Ziellaufzeitumgebung identifiziert wurde (development
, test
oder production
).
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]
})
}
Und dies ist der entsprechende Abschnitt meiner DataSource.groovy
Konfiguration:
// 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'
}
}
}
In meinem Fall ist es so ziemlich das gleiche für test
und production
Umgebungen. Vielen Dank!
Dieser Gist sollte für jede Version von Grails funktionieren. –
@JoshuaMoore True, aber es sollte wahrscheinlich aktualisiert werden, um 'grails.util.Holders' anstelle der veralteten individuellen Holder-Klassen zu verwenden. – rmlan
@rmlan Einverstanden, aber der Ansatz ist immer noch gleich. –