Java Google应用程序引擎上的Spring计划任务

Java Google应用程序引擎上的Spring计划任务,java,spring,google-app-engine,Java,Spring,Google App Engine,我刚刚尝试在Google App Engine上部署我的Java/Spring解决方案,当我尝试访问一个REST服务时(我想这会触发应用程序开始运行),我在日志中看到一个异常 这似乎与我预定的任务有关。我知道线程管理仅限于GAE(通常是一件好事),我知道他们有一种叫做CRON的东西用于调度,但我确实希望使用Spring中的调度任务。有办法吗 例外情况: Uncaught exception from servlet java.security.AccessControlException: ac

我刚刚尝试在Google App Engine上部署我的Java/Spring解决方案,当我尝试访问一个REST服务时(我想这会触发应用程序开始运行),我在日志中看到一个异常

这似乎与我预定的任务有关。我知道线程管理仅限于GAE(通常是一件好事),我知道他们有一种叫做CRON的东西用于调度,但我确实希望使用Spring中的调度任务。有办法吗

例外情况:

Uncaught exception from servlet
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:484)
    at java.security.AccessController.checkPermission(AccessController.java:698)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55)
    at com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:136)
    at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
    at java.lang.Thread.init(Thread.java:391)
    at java.lang.Thread.init(Thread.java:349)
    at java.lang.Thread.<init>(Thread.java:675)
    at java.util.concurrent.Executors$DefaultThreadFactory.newThread(Executors.java:572)
    at java.util.concurrent.ThreadPoolExecutor$Worker.<init>(ThreadPoolExecutor.java:600)
    at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943)
    at java.util.concurrent.ThreadPoolExecutor.ensurePrestart(ThreadPoolExecutor.java:1635)
    at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:307)
    at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:566)
    at java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Executors.java:695)
    at org.springframework.scheduling.concurrent.ConcurrentTaskScheduler.scheduleAtFixedRate(ConcurrentTaskScheduler.java:203)
    at org.springframework.scheduling.config.ScheduledTaskRegistrar.scheduleTasks(ScheduledTaskRegistrar.java:318)
    at org.springframework.scheduling.config.ScheduledTaskRegistrar.afterPropertiesSet(ScheduledTaskRegistrar.java:284)
    at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.finishRegistration(ScheduledAnnotationBeanPostProcessor.java:208)
    at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.onApplicationEvent(ScheduledAnnotationBeanPostProcessor.java:162)
    at org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor.onApplicationEvent(ScheduledAnnotationBeanPostProcessor.java:85)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151)
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128)
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331)
    at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
    at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
    at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
    at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:203)
    at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:176)
    at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:133)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:511)
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:446)
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:453)
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:274)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:312)
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:304)
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:450)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
    at java.lang.Thread.run(Thread.java:745)
来自servlet的未捕获异常 java.security.AccessControlException:拒绝访问(“java.lang.RuntimePermission”“modifyThreadGroup”) 位于java.security.AccessControlContext.checkPermission(AccessControlContext.java:484) 在java.security.AccessController.checkPermission(AccessController.java:698) 位于java.lang.SecurityManager.checkPermission(SecurityManager.java:549) 位于com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:55) 位于com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:136) 位于java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315) 位于java.lang.Thread.init(Thread.java:391) 位于java.lang.Thread.init(Thread.java:349) 位于java.lang.Thread.(Thread.java:675) 位于java.util.concurrent.Executors$DefaultThreadFactory.newThread(Executors.java:572) 位于java.util.concurrent.ThreadPoolExecutor$Worker。(ThreadPoolExecutor.java:600) 位于java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943) 位于java.util.concurrent.ThreadPoolExecutor.EnsureStart(ThreadPoolExecutor.java:1635) 位于java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:307) 位于java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:566) 位于java.util.concurrent.Executors$DelegatedScheduledExecutorService.scheduleAtFixedRate(Executors.java:695) 位于org.springframework.scheduling.concurrent.ConcurrentTaskScheduler.scheduleAtFixedRate(ConcurrentTaskScheduler.java:203) 位于org.springframework.scheduling.config.ScheduledTaskRegistrar.scheduletaskregistrar(ScheduledTaskRegistrar.java:318) 位于org.springframework.scheduling.config.scheduledtaskregistra.afterPropertieSet(scheduledtaskregistra.java:284) 位于org.springframework.scheduling.annotation.ScheduledAnotationBeanPostProcessor.finishRegistration(ScheduledAnotationBeanPostProcessor.java:208) 位于org.springframework.scheduling.annotation.ScheduledAnotationBeanPostProcessor.onApplicationEvent(ScheduledAnotationBeanPostProcessor.java:162) 位于org.springframework.scheduling.annotation.ScheduledAnotationBeanPostProcessor.onApplicationEvent(ScheduledAnotationBeanPostProcessor.java:85) 位于org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:151) 位于org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:128) 位于org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:331) 位于org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:773) 位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483) 位于org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434) 位于org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306) 位于org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106) 位于org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548) 位于org.mortbay.jetty.servlet.Context.startContext(Context.java:136) 位于org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250) 位于org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517) 位于org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467) 位于org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50) 位于com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:203) 位于com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:176) 在com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest上(JettyServletEngineAdapter.java:133) 位于com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:511) 位于com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:446) 在com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:453) 位于com.google.tracing.CurrentContext.runInContext(CurrentContext.java:274) 在com.google.tracing.TraceContext$AbstractTraceContextCallback.RunInheritedContextNonRef(TraceContext.java:312)上 在com.google.tracing.TraceContext$AbstractTraceContextCallback.RunInheritedContext(TraceContext.java:304)上 位于com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:450) 位于com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235) 运行(Thread.java:745)
您的应用程序是否在前端实例上运行?您的应用程序是否在前端实例上运行?