【发布时间】:2020-03-19 16:07:44
【问题描述】:
我有一个 Grails 插件 (4.0.1),我正在尝试以与 Grails 无关的方式绑定属性。
我在runtime.groovy中的数据源如下;
dataSource {
dbCreate = 'none'
pooled = true
username = "root"
password = ""
dialect = UTF8MySQL5InnoDBDialect.name
driverClassName = "com.mysql.jdbc.Driver"
properties {
jmxEnabled = false
initialSize = 5
}
remoteDataSources {
disabled = false
urlGenerator = { String host ->
"jdbc:mysql://${host}:3306/myDb?characterEncoding=utf8"
}
}
}
使用 Grails 方法访问上面的配置可以正常工作;
def dbConfig = grailsApplication.config.dataSource
String dbUrl = dbConfig.urlGenerator(thisHost)
但是当我尝试使用与 Grails 无关的方法(Spring Boot)时,我无法绑定它;
@Value('${dataSource}')
private Map dataSource
单独访问似乎有效;
@Value('${dataSource.remoteDataSources.disabled}')
private boolean disabled
但主要问题在于关闭;
@Value('${dataSource.remoteDataSources.urlGenerator}')
private Closure urlGenerator
结果;
java.lang.IllegalStateException:无法将类型“java.lang.String”的值转换为所需类型“groovy.lang.Closure”:找不到匹配的编辑器或转换策略
我不确定我正在尝试做的事情是否可能,但以防万一有人对更好的方法或解决方法有任何想法,那就太好了!
【问题讨论】:
-
当然,我真的理解为什么会抛出错误。闭包类型不存在转换策略。我想弄清楚的是,是否有人知道这是否可以实现?
标签: spring grails groovy properties binding