我正在尝试在Grails 3中使用run-script命令和我的一个服务。
我的所有服务都标有@Transactional标签。我在src / main / groovy文件夹中创建了一个“独立”groovy文件,声明了其中一个服务,并希望在其上调用一个方法。
我的独立groovy文件声明了一个dataSource并将其设置为:
def dataSource = new OracleDataSource(URL: 'jdbc:oracle:thin:@localhost:1521:local', user: 'test', password: '');
我可以通过执行以下操作验证它是否可以在独立的groovy文件中运行:
sql = new Sql(dataSource);
sql.eachRow("SELECT COUNT(*) AS MYCOUNT FROM MYTABLE") {
myCount = it."MYCOUNT";
}
它工作正常。
然后我将dataSource作为参数传递给我的服务类。请注意,当我将Grails应用程序作为“普通”Grails应用程序运行时,我不需要这样做,因为服务“已经知道”如何初始化它具有的dataSource属性。但是当使用“grails run-script”运行我的独立groovy文件并想要使用该服务时,我这样做:
applicationFunctionService.setSession(dataSource);
但是之后当我在我的服务上调用一个涉及进行SQL /数据库交互的方法时,它会抛出此错误(当使用grails run-script时)
Script execution error: No transactionManager was specified. Using @Transactional or @Rollback requires a valid configured transaction manager. If you are running in a unit test ensure the test has been properly configured and that you run the test suite not an individual test method.
:runScript FAILED
请注意,我的意图是不要按照说法进行测试...我实际上想要一个“独立”的groovy文件,它在Grails-context中调用我的Grails服务。我还希望将服务保留为@Transactional标签。虽然我不介意在我独立的常规课程的背景下“关闭@Transaction”,如果可能的话。
有没有办法处理这个错误?