在我的config.groovy文件中,我定义了dataSource.url ='jdbc:mysql:// localhost / mydbname?autoReconnect = true& characterEncoding = utf8'
是否可以从控制器中检索'mydbname'?我已经注入了dataSource,它正在给出一个 org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy但是从那里,我无法弄清楚如何获取数据库名称。应该检索数据库名称而不进行任何字符串解析,因为用于应用程序的配置可以在环境之间进行大量更改,因此理想情况下我正在寻找类似.getDatasourceName()的方法
我试过这个:
flash.message = "DB name ${dataSource.getConnection().getClientInfo()}"
但是返回的消息是:DB name [:]
答案 0 :(得分:2)
我认为您可以做的最好的事情是检索URL,然后解析出数据库名称。你可以这样做:
import org.apache.commons.lang.StringUtils
class MyController {
DataSource dataSource
String getDatabaseName() {
def url = dataSource.targetDataSource.targetDataSource.poolProperties.url
url = StringUtils.substringAfterLast(url, '/')
return StringUtils.substringBefore(url, '?')
}
}
这应该返回数据库名称而不管任何数据源URL参数,例如它适用于以下所有方面:
答案 1 :(得分:0)
最狂野的方式:
def dataSource
private String getDatabaseName(){
def url = dataSource.targetDataSource.targetDataSource.poolProperties.url
return url.split('/').toList().last().tokenize('?')[0]
}
它有两种方式,有或没有url params。