您可以在 Grails 数据源配置文件中引用远程资源吗?
Can you reference a remote resource in a Grails datasource config file?
我想从远程资源配置 Grails 数据源的 url 属性。 (我想在 etcd 中保留一些信息)。例如像这样:
def jsonSlurper = new JsonSlurper()
def urlConfig = jsonSlurper.parseText(new URL("http://127.0.0.1:2379/v2/keys/dataSource/url").text)
dataSource {
....
url = ${urlConfig.node.value}
}
如果我在启动应用程序时在配置文件中打印 url 值,它会显示预期值。但是使用动态方式出现如下错误:
Caused by: org.springframework.jdbc.support.MetaDataAccessException:
Error while extracting DatabaseMetaData; nested exception is
java.sql.SQLException: Driver:com.mysql.jdbc.Driver@44a3eec9 returned
null for URL:jdbc:h2:mem:grailsDB;MVCC=TRUE;LOCK_TIMEOUT=10000
所以看起来这种方法不加修改就行不通了。那正确吗?即 Grails 目前是否仅支持数据库 URL 值被配置为数据源配置文件中的静态字符串?
我们像这样加载外部数据源配置文件,也许你可以试试。
DataSource.groovy:
import org.springframework.core.io.support.PropertiesLoaderUtils as PLU
import org.springframework.core.io.ClassPathResource as CPR
...
try {
ConfigObject properties = new ConfigSlurper().parse(PLU.loadProperties(new CPR('DataSource.properties')))
dataSource.merge( properties.dataSource )
hibernate.merge( properties.hibernate )
} catch (java.io.FileNotFoundException e){}
DataSource.properties:
dataSource.url = jdbc:oracle:thin:@localhost:1521:orcl
...
hibernate.properties.xxxx = dddd
事实证明你可以。我上面的问题是一个愚蠢的语法错误...将值设置为 url = ${urlConfig.node.value}
而不是 url = urlConfig.node.value
我想从远程资源配置 Grails 数据源的 url 属性。 (我想在 etcd 中保留一些信息)。例如像这样:
def jsonSlurper = new JsonSlurper()
def urlConfig = jsonSlurper.parseText(new URL("http://127.0.0.1:2379/v2/keys/dataSource/url").text)
dataSource {
....
url = ${urlConfig.node.value}
}
如果我在启动应用程序时在配置文件中打印 url 值,它会显示预期值。但是使用动态方式出现如下错误:
Caused by: org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:com.mysql.jdbc.Driver@44a3eec9 returned null for URL:jdbc:h2:mem:grailsDB;MVCC=TRUE;LOCK_TIMEOUT=10000
所以看起来这种方法不加修改就行不通了。那正确吗?即 Grails 目前是否仅支持数据库 URL 值被配置为数据源配置文件中的静态字符串?
我们像这样加载外部数据源配置文件,也许你可以试试。
DataSource.groovy:
import org.springframework.core.io.support.PropertiesLoaderUtils as PLU
import org.springframework.core.io.ClassPathResource as CPR
...
try {
ConfigObject properties = new ConfigSlurper().parse(PLU.loadProperties(new CPR('DataSource.properties')))
dataSource.merge( properties.dataSource )
hibernate.merge( properties.hibernate )
} catch (java.io.FileNotFoundException e){}
DataSource.properties:
dataSource.url = jdbc:oracle:thin:@localhost:1521:orcl
...
hibernate.properties.xxxx = dddd
事实证明你可以。我上面的问题是一个愚蠢的语法错误...将值设置为 url = ${urlConfig.node.value}
而不是 url = urlConfig.node.value