我试图通过标准Groovy-Grails应用程序中的multiThreaded程序将多行数据插入表中。该应用程序使用标准GORM对象进行数据库交互。每个线程都插入一组不同的行。我在调用Runnable Groovy类的Grails服务中使用ExecutorService和FixedThreadPool。 Runnable类查询DB,执行大量计算并将派生值插入表中。我遇到了以下异常。
`Error java.lang.NullPointerException
Error at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130)
Error at org.codehaus.groovy.grails.orm.support.GrailsTransactionTemplate.execute(GrailsTransactionTemplate.groovy:85)
这是Runnable类。
@Transactional
class MyRunnable{
def aService
def bService
def run(){
for (i=1; i<n; i++){//n is a finite integer
def x = aService.doSomething()
def y = bService.doSomething(x)
AGormClass.addToBGormClass(y)
}
AGormClass.save flush:true
}
}
这里的Grails服务初始化线程池并调用Runnable类。
@Transactional
class SvcClass{
ExecutorService exeSvc = Executors.newFixedThreadPool(2)
MyRunnable runnable = new MyRunnable()
exeSvc.execute(runnable as Runnable)
exeSvc.shutdown()
}