无法连接grails项目中的数据源

问题描述 投票:0回答:2

我创建了一个

Grails 3.3.8
项目。数据源 (Oracle) 配置已在
application.yml
文件中成功完成。但是当我在 groovy 类中使用数据源时,我面临以下错误:

Caused by GroovyRuntimeException: Ambiguous method overloading for method groovy.sql.Sql#<init>.
Cannot resolve which method to invoke for [null] due to overlapping prototypes between:
    [interface java.sql.Connection]
    [interface javax.sql.DataSource]

我的代码是:

package DATABASE_CONF
import groovy.sql.Sql  
/**
 *
 * @author CESC
 */
public class dbconn {

    def dataSource

    public String showname2() {

        def sql = new Sql(dataSource)
        def namestr = ""

        sql.eachRow('select * from TEST_TB') {
            tp -> 
            namestr = namestr + "<br>" + tp.NAME
        }  

        sql.close()
        return namestr          
    }       
}
grails
2个回答
2
投票

您的类无法解析

dataSource
属性,因此会出现 null 且不明确的方法重载异常。

原因可能是您的类位于

src
文件夹中并且不参与 bean(自动)装配。有几种方法可以解决这个问题:

  1. 将你的类放在/grails-app/services下
    so it will get the
    dataSource`自动注入(推荐)
  2. dataSource
    声明为
    showname2()
    方法的参数,并在每次调用时显式传递它。
  3. 为您的班级添加接线机制。我不是 Spring 专家,但我认为它是一个注释和一些配置调整。

0
投票

我收到了完全相同的错误消息。我发现有效的方法是手动注入 dataSource bean,如下所示:

class SomeClass {
 def dataSource = grails.util.Holders.applicationContext.getBean("dataSource")

 def myMethod {
      Sql sql = new Sql(dataSource)
       //Enter a SQL query
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.