回答

收藏

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

技术问答 技术问答 202 人阅读 | 0 人回复 | 2023-09-14

如何从常规groovy类中访问数据源?注入不能像使用服务那样工作。
! J/ g4 F/ {8 o  g; m, [3 m: M% r这样做的原因是,因为我在使用旧数据库,我需要从groovy类调用一些手动数据库(即:使用:groovy.sql.Sql类的SQL语句)。
4 p3 o4 {2 Z) C% q* ^1 h2 R& h                                                                ) ^+ T& j: ?/ T) ?
    解决方案:                                                                ' F, G' k. d( V: Z/ w+ G
                                                                dataSource是一个在services使用时会自动注入bean; I( L, @8 {, h5 o5 p; r
。默认情况下,一切bean自动安装grails构件(控制器、服务等。).在你的情况下,你使用它POGO,我认为它应该在里面src/groovy。8 V) c4 Y) M0 N; G% I# Z# X
您可以dataSource通过将bean本身变成bean来显式地将bean注入POGO类。# M9 o* s: {: _9 i2 |) G+ m4 Z
//resources.groovybeans =    myPogo(MyPogo){          dataSource = ref('dataSource MyPogo.groovyMyPogo    def dataSource    ....}这是一个昂贵的操作。如果你已经在那里了POGO中访问applicationContext或grailsApplication在POGO中间访问不需要上述创建bean。8 s+ C1 B6 S3 O& s
dataSource 可直接从上下文获取Bean,如下所示:! ?2 z" f6 E  F& x& E
//ctx being ApplicationContextdef dataSource = ctx.getBean('dataSource')//or if grailsApplication is availabledef dataSource = grailsApplication.mainContext.getBean('dataSource')如果要从grails工件中调用POGO请使用以下方法,而不是所有上述方法。  q, ]: J( t% ^
//service classclass MyService {   def dataSource //autowired   def serviceMethod()()()()()()()(                 )()()()()()()()()()()()()()()()())())()())()())())()()()()())()())()()())())()()())()()()()()())()())())()())()())())())())()())()()()())())()())())()()))()()())())())())()()()))())()())()())()()())())())())())())())())()())())())()))()))()))()))())())()))())))())))))()))))()))()))())))())()))())))()))))())))()))))())))))()))))()))())))())))()))()))))()))()))()))))))()))))))())))()))))()))))()))))()))())))))()))))()))())))))()))))))))()()()))())))))))))())))))))))())))))))))())())()())()))())))))()))))()))))))))())))))))))())))))))))())))))())()))))MyPogo pogo = new MyPogo()         pogo.dataSource = dataSource //set dataSource in POGO
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则