1

我在 Grails 中编写了一个应用程序,但我在使用石英时遇到了一些问题。我想从数据库中获取用户,然后再获取他的服务器。如果有任何服务器,我想在每个服务器上检查 PING 命令,但我收到如下消息:

工作运行外壳 ^ 549 | 跑 。. 在 org.quartz.simpl.SimpleThreadPool$WorkerThread
由 IllegalStateException 引起:未找到线程绑定请求:您是指实际 Web 请求之外的请求属性,还是在原始接收线程之外处理请求?如果您实际上是在 Web 请求中操作并且仍然收到此消息,则您的代码可能在 DispatcherServlet/DispatcherPortlet 之外运行:在这种情况下,请使用 RequestContextListener 或 RequestContextFilter 来公开当前请求。->> 131 | org.springframework.web.context.request.RequestContextHolder 中的 currentRequestAttributes"

这是我的代码:

 def execute() {
     pingService.checkPing()
 }



 def checkPing = {
     User user = User.findByLogin(session.user.login) //get user
     def hostsToPing = importFromDB()
     if (!hostsToPing.isEmpty()) {
         hostsToPing.each {host ->
             doPing(host)
         }
     } else {
         //something else
     }
 }

 def importFromDB = {
     User user = User.findByLogin(session.user.login)
     def hostsList = Host.findAllByUser(user)
     hostsList
 }

 def doPing(Host host) {
     println "InetAdress: " + InetAddress.getByName(host.hostAdress)
     println "InetAdress is Rea: " + InetAddress.getLocalHost().isReachable(1000)
 }

当是这样的时候就不存在这个问题:

def doPing(Host host) {
    println "InetAdress: " + InetAddress.getByName("www.google.com")
    println "InetAdress is Reachable : " + InetAddress.getLocalHost().isReachable(1000)
}

有谁知道出了什么问题?

4

1 回答 1

1

那是因为你指的是session.user.loginsessionJob, 期间没有。想象一下,当没有用户登录时,工作就开始了——那你指的是什么用户?

因此,要么检查每个用户,User.list()要么制作一个带有用户队列的单例 bean。

于 2012-12-04T22:24:47.343 回答