Grails数据源在Service中变为null

时间:2013-09-04 17:41:26

标签: grails service null datasource

我正在使用Grails 2.2.1,并且我将一个自定义dataSource注入到服务中,以便我可以执行一些SQL查询。

首次执行时,有一个dataSource,但在每次后续调用中,对dataSource的引用都变为null。

class ReportService {
  def dataSource_myds

  Object[] reportRecords(int a) {
    String query = "SELECT ..."

    Object[] resultSet;

    Sql sql = new Sql(dataSource_myds)
    // ^ Here the NullPointerException is thrown
    // But it always works at the first execution

    sql.eachRow(query, [a]) {
      ...
      resultSet += result
    }
    return resultSet
  }
}

class ReportController {
  ReportService reportService

  def report = {
     ...
     Object[] resultSet1 = reportService.reportRecords(1)
     ...
     Object[] resultSet2 = reportService.reportRecords(2)
     // ^ java.lang.NullPointerException : Must specify a non-null Connection
     ...
  }
}

以前有没有人见过这个,如果有的话,我怎么能避免这个?

这是我的DataSource.groovy

environments {
  development {
    dataSource_myds {
      url = "jdbc:oracle:thin:@..."
      driverClassName = "oracle.jdbc.driver.OracleDriver"
      username = "..."
      password = "..."
    }
  }
}

4 个答案:

答案 0 :(得分:1)

解决了避免2次后续调用服务的问题。在第一次从控制器调用之后,框架似乎使服务连接为空。

答案 1 :(得分:1)

James Kleeh的评论为我解决了这个问题 - grails clean然后重启了应用。

答案 2 :(得分:0)

尝试使用resources.groovy方式。这也将为您提供环境基础数据源选项。

在下面给出的链接上解释得很好:

Grails 2 multiple dynamic datasources in services

由于

答案 3 :(得分:0)

我遇到了类似的问题,并已解决。首先,请确保您的服务类位于grails-app/services文件夹中。其次,您需要确保使用注入机制而不是使用构造函数来获取服务类的对象。我的服务类位于正确的文件夹中,但是我试图在控制器中将服务类的实例创建为MyService.instance,并且出现null dataSource / connection的问题。然后,我在控制器中尝试了def myService而不是MyService.instance,它开始工作了。希望这可以帮助。谢谢