Grails:在普通的 groovy 类中获取数据源

Posted

技术标签:

【中文标题】Grails:在普通的 groovy 类中获取数据源【英文标题】:Grails: Getting the Data Source in a normal groovy class 【发布时间】:2014-02-24 19:08:05 【问题描述】:

如何从普通的 groovy 类中访问数据源?注入不像服务那样​​起作用。

原因是我需要从 groovy 类中执行一些手动数据库调用(即:使用 groovy.sql.Sql 类的 SQL 语句),因为我正在使用旧数据库。

【问题讨论】:

【参考方案1】:

dataSource 是一个 bean,使用时会自动注入 services。默认情况下,所有 bean 都自动连接到 grails 工件(控制器、服务等)中。在您的情况下,您使用的是 POGO,我想它会在 src/groovy 内。

您可以将dataSource bean 显式地注入到 POGO 类中,方法是使其本身成为一个 bean

//resources.groovy
beans = 
    myPogo(MyPogo)
        dataSource = ref('dataSource')
    


//MyPogo.groovy
MyPogo 
    def dataSource
    ....

这是一项昂贵的操作。如果您已经在 POGO 中访问 applicationContextgrailsApplication,那么您不需要像上面提到的那样创建 bean。

dataSource bean 可以直接从上下文中获取为:

//ctx being ApplicationContext
def dataSource = ctx.getBean('dataSource')

//or if grailsApplication is available
def dataSource = grailsApplication.mainContext.getBean('dataSource')

如果您从 grails 工件调用 POGO 类方法,则使用以下方法而不是上述所有方法。例如:

//service class
class MyService 
   def dataSource //autowired

   def serviceMethod()
       MyPogo pogo = new MyPogo()
       pogo.dataSource = dataSource //set dataSource in POGO
   

【讨论】:

【参考方案2】:

进行手动数据库调用的简单解决方案:

def grailsApplication

def getSeqVal () 

    SessionFactory sessionFactory = grailsApplication.mainContext.sessionFactory


    def sql = "--INSERT QUERY HERE--"
    def query = sessionFactory.currentSession.createSQLQuery(sql);
    def result = query.list()
    return result[0]


【讨论】:

以上是关于Grails:在普通的 groovy 类中获取数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Grails 服务注入 src/groovy 类

如何在运行时获取 Grails Config.groovy 中的好东西?

如何在 IntelliJ IDEA Grails 项目中为 groovy 方法获取 javadocs / groovydocs?

Grails 2.5.1 domain.get(id)获取缓存数据

环境特定的 Grails 服务配置

在 Groovy/Grails 中使用 JSON 创建对象