我应该从 Quartz 作业调用 Grails 控制器来进行 REST API 调用吗?
我看到很多帖子都指出石英作业不应调用控制器。我正在使用 Grails 来使用 salesforce.com 对 REST API 的新支持。每晚的工作将使用该 API 将客户数据从我们的专有数据库更新到销售人员环境。有一个使用登录 ID 创建的会话。
所以...我想使用 grails 的作业插件为我提供 cron 风格的方式来调用与服务交互的控制器,以便通过 httpclient 发送 REST API 调用来更新/更新插入 salesforce.com 中的对象土地。
这似乎是从 Grails 的工作区域调用控制器的合理理由。
希望有任何反馈或替代方法(在 Grails 内)来处理这个问题。 谢谢,大卫
I've seen a number of postings citing that quartz jobs should not invoke controllers. I'm using Grails to use salesforce.com's new support for the REST API. The nightly job would use that API to update customer data from our proprietary DB to the salesforce environment. There is a session that is created using a login id.
So... I would like to use the jobs plug-in for grails to give me the cron-style way to invoke controllers that interact with services in order to send REST API calls via httpclient to update/upsert our objects in salesforce.com land.
It seems like this would be a legitimate reason for invoking controllers from the jobs area in Grails.
Would love any feedback or alternative approaches (within Grails) for handling this.
thx, David
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
为什么要从 Quartz 作业调用控制器?这看起来很尴尬。
用户grails 服务。
Quartz 插件具有依赖注入,因此应该很容易调用服务方法。
Why have you invoke controllers from Quartz jobs ? This looks whery awkward.
User grails services.
Quartz plugin has dependency injection so it should be easy to invoke service methods.
即使您从quartz 任务中调用控制器,您也将无法访问会话,因为没有经过身份验证的用户。如果您想制作一些复杂的业务逻辑,请将其放入服务中,然后从您的工作中调用它。在quartz作业中声明服务与在控制器中声明完全相同。
Even if you invoke a controller from a quartz task, you won't be able to access the session because there will be no authenticated user. If you want to make some complex business logic put it in a service and then call it from your job. Declaring services in quartz jobs is exactly the same as the declaration in the controllers.
我觉得这个问题是一个有效的问题。我有类似的要求。我使用了 Grails Rest 插件。一个 grails 控制器操作,将一些报告数据导出到 Excel 中,并每天通过电子邮件将其发送到电子邮件列表。所以我在控制器中创建了一个方法:
然后除了 myService.groovy 中的 exportToExcel() 实现之外,我还创建了一个附加方法,如下所示:
def runExportToExcelJob() {
withHttp(uri: "http://localhost:9092/myProject/"){
返回 get(路径: 'myController/exportToExcel')
}
最后
,在我的 grailsquartz 作业中,我调用了 myService.runExportToExcelJob()。
效果很好。但我也想知道是否还有另一种方法可以从 grails 工作中拨打休息电话。非常感谢任何反馈。
I feel the question is a valid one. I had a similar requirement. I used grails rest plugin. A grails controller action that exports some report data into excel and email it to emailing list on daily basis. So I created a method in controller:
Then besides exportToExcel() implementation in myService.groovy, I created an additional method as under:
def runExportToExcelJob() {
withHttp(uri: "http://localhost:9092/myProject/"){
return get(path: 'myController/exportToExcel')
}
}
And finally, in my grails quartz job, I invoked myService.runExportToExcelJob().
It works fine. But I too wonder, if there is another way of making a rest call from grails job. Any feedback is really appreciated.