Java Google应用程序引擎上的Spring计划任务
我刚刚尝试在Google App Engine上部署我的Java/Spring解决方案,当我尝试访问一个REST服务时(我想这会触发应用程序开始运行),我在日志中看到一个异常 这似乎与我预定的任务有关。我知道线程管理仅限于GAE(通常是一件好事),我知道他们有一种叫做CRON的东西用于调度,但我确实希望使用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
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)
您的应用程序是否在前端实例上运行?您的应用程序是否在前端实例上运行?