从dataSource检索数据库名称

时间:2014-07-21 09:27:21

标签: mysql grails datasource

在我的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 [:]

2 个答案:

答案 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参数,例如它适用于以下所有方面:

  • JDBC:MySQL的://本地主机/ mydbname autoReconnect的=真安培;的characterEncoding = UTF8
  • JDBC:MySQL的://本地主机/ mydbname autoReconnect的=真
  • JDBC:MySQL的://本地主机/ mydbname

答案 1 :(得分:0)

最狂野的方式:

def dataSource
private String getDatabaseName(){
    def url = dataSource.targetDataSource.targetDataSource.poolProperties.url
    return url.split('/').toList().last().tokenize('?')[0]      
}

它有两种方式,有或没有url params。