我正在从事 GWT Appenginge 项目。我从外部 api 获取数据,我想每分钟更新一次数据库。我刚刚发现 appengine 不允许使用计时器!为什么??有什么解决方法,或者你认为我有一般的设计缺陷。
谢谢
我正在从事 GWT Appenginge 项目。我从外部 api 获取数据,我想每分钟更新一次数据库。我刚刚发现 appengine 不允许使用计时器!为什么??有什么解决方法,或者你认为我有一般的设计缺陷。
谢谢
您是否尝试过 App Engine cron 任务?
您可能正在寻找与此类似的内容:GWT、Google App Engine、TimerTask 或 ServiceImpl 中的线程抛出异常
此外,您可能想要更新您的问题标题 - 它似乎与您的问题无关。
按要求回答您的问题:
我刚刚发现 appengine 不允许使用计时器!为什么??
java.util.Timer 是使用 Thread 实现的,AppEngine 不允许,除非使用它自己的 API。所以当你尝试使用 java.util.Timer 时,你会得到一个异常:
java.security.AccessControlException: access denied ("java.lang.RuntimePermission" "modifyThreadGroup")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:375)
at java.security.AccessController.checkPermission(AccessController.java:565)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager.java:56)
at com.google.apphosting.runtime.security.CustomSecurityManager.checkAccess(CustomSecurityManager.java:131)
at java.lang.ThreadGroup.checkAccess(ThreadGroup.java:315)
at java.lang.Thread.init(Thread.java:378)
at java.lang.Thread.<init>(Thread.java:432)
at java.util.TimerThread.<init>(Timer.java:499)
at java.util.Timer.<init>(Timer.java:101)
at java.util.Timer.<init>(Timer.java:132)
禁止任意线程创建使 AppEngine 系统更容易管理同一台机器上的多个应用程序,而不会过多地相互干扰。
AppEngine 正在提供一项名为“托管 VM”的新服务,该服务将允许您想要的任何环境,包括可以具有后台线程的完整 JVM: https ://developers.google.com/appengine/docs/managed-vms/
请注意,此 API 当前处于“预览”状态,这意味着尚不建议将其用于可靠的生产用途。