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

标签 sql grails groovy datasource code-injection

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

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

最佳答案

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

您可以注入(inject) dataSource通过使其本身成为 bean 显式地添加到 POGO 类

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

//MyPogo.groovy
MyPogo {
    def dataSource
    ....
}

这是一项昂贵的操作。如果您已经在访问 applicationContextgrailsApplication在 POGO 中,您不需要像上面提到的那样创建 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
   }
}

关于sql - Grails:在普通的 groovy 类中获取数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21491074/

相关文章:

jenkins - 在 jenkins 管道脚本中获取 gradle 变量

mysql - 保持连接 - mysql

grails - 具有父/子继承关系的Grails i18n验证错误消息

grails - 如何在grails中使用左连接?

unit-testing - 在升级到JDK 8后,为什么我的Spock单元测试在Gradle构建中失败?

grails - Groovy 在 list.find 调用上给出 NPE,但仅在一段时间之后

sql - 使用子选择更新 - 如何处理 NULL 值?

mysql - 无数据库连接时的查询处理

mysql - SQL查询获取最近的交易日期

grails - IntelliJ IDEA Grails 看不到 Jar