当前位置: 首页 > 面试题库 >

Grails:以常规groovy类获取数据源

罗允晨
2023-03-14
问题内容

如何从常规groovy类中访问数据源?注入无法像使用服务那样工作。

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


问题答案:

dataSource是一个在services使用时会自动注入的bean
。默认情况下,所有bean都自动安装在grails构件(控制器,服务等)中。在您的情况下,您使用的是POGO,我想它应该在里面src/groovy

您可以dataSource通过将bean本身变成bean来显式地将bean注入POGO类。

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

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

这是一个昂贵的操作。如果您已经在POGO中访问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
   }
}


 类似资料:
  • 我有3张桌子: 学校之间存在一对多的关系- 我正在编写查询以获取特定学校的学生: 虽然我没有在规范查询或代码中的任何地方获取主题(如使用)。 我仍然可以在生成的查询中的日志中看到主题最终被获取。 我如何更新我的查询以仅限于学校 请建议。

  • Groovy/Grails Tool Suite (GGTS)是一个不带所有插件的较小版本(但是你可以手动安装它们),但它会为Groovy和Grails的开发进行预配置:使用Groovy 1.8的Groovy-Eclipse、Grails IDE、tc Server integration和针对tc Server Developer Edition 2.7.0和Grails 2.0.4的运行时。

  • 问题内容: 我在Groovy中实现了Grails服务,我想在Web应用程序中将其注入Java类。我知道我可以通过applicationContext.getBean(“ exampleService”)获得Java中的bean,但是在编译时类型ExampleService是未知的。 我可以简单地导入服务吗?它似乎没有声明一个典型的包。 (我对Grails和Java Web还是很陌生,因此非常感谢能

  • 12.1.6.获取数据类型 ContentProvider必须能够给出数据的MIME类型。MIME类型是针对URI而言,表示单个条目和表示多个条目的URI的MIME类型就是不同的。在本章前面,我们曾定义了单个条目的MIME类型vnd.android.cursor.item/vnd.marakana.yamba.status,而多个条目的MIME类型是vnd.android.cursor.dir/v

  • 问题内容: 昨天,我将第一个Grails(2.3.6)应用程序部署到开发服务器并开始对其进行监视。我刚得到一个自动监视器,指出CPU已固定在这台计算机上,因此我通过SSH进入了它。我跑去,发现固定服务器的是我的Java应用程序的PID。我还注意到内存为40%。几秒钟后,CPU停止固定,下降到正常水平,内存下降到〜20%范围。经典大型GC。 在收集时,我进行了堆转储。GC之后,然后我在JVisual

  • 我一直挣扎在这甚至在做了这么多的研究这么简单的事情,所以我需要一些帮助在这里。 我需要传递日期数据类型的当前日期,只有'yyyy-mm-dd'格式。SimpleDateFormat将当前日期转换为字符串类型,在尝试解析时,它将转换为日期类型,但会更改格式。 我需要日期类型的“YYYY-MM-DD”格式的currentDate。