我想从远程资源配置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值,它会显示预期值。但使用动态方法时会出现以下错误:
引起:org.springframework.jdbc.support.MetaDataAccessException: 提取DatabaseMetaData时出错;嵌套异常是 java.sql.SQLException:驱动程序:com.mysql.jdbc.Driver@44a3eec9返回 URL为null:jdbc:h2:mem:grailsDB; MVCC = TRUE; LOCK_TIMEOUT = 10000
所以看起来这种方法在没有修改的情况下无法工作。是对的吗?即Grails目前是否仅支持在数据源配置文件中配置为静态字符串的数据库URL值?
答案 0 :(得分:0)
我们像这样加载外部数据源配置文件,也许你可以试试。
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
答案 1 :(得分:0)
原来你可以。我上面的问题是语法错误...将值设置为url = ${urlConfig.node.value}
而不是url = urlConfig.node.value