配置Eclipse以将App Engine类预先捆绑到单个JAR中,以便更快地进行预热

Ibr*_*ief 21 java eclipse deployment google-app-engine jar

在与另一家同时使用App Engine的公司的同事讨论后,他告诉我,他设法使用以下步骤将他的应用程序预热时间从约15秒减少到约5秒:

  1. 配置Eclipse以将编译期间生成的类捆绑到单个JAR文件中.
  2. 配置Eclipse以在App Engine部署期间上载此单个JAR文件,而不是上载数百(或数千)个单独的Java类.

他认为,在实例预热期间,由于实例只需要加载一个捆绑的JAR文件而不是数千个单独的类,因此预热会明显加快.对此有何想法或意见?

我肯定想亲自尝试一下,但我没有足够的Eclipse-mojo知道如何配置这些步骤.有谁知道如何配置Eclipse或Eclipse的Google插件来执行上述步骤?(当然,已部署的应用程序在App Engine中成功运行)

谢谢,

Dav*_*ger 2

正如之前的回答所述,App Engine SDK 支持打包WEB-INF/classes成 jar 文件,该文件最终会以WEB-INF/lib/_ah_webinf_classes-0000.jar. 你可以激活这个

  1. 使用带有选项的 appcfg 工具--enable_jar_classes

  2. 通过配置 WAR 或 EAR 项目的属性来使用 Google Plugin for Eclipse:项目属性 > Google App Engine > 部署 >“将 WEB-INF/classes 打包为 jar”

对于我来说,在 App Engine 1.9.4 上,这仅对实例启动产生了微小的改进(大约 5-10%,如果有的话)。


请注意,这将打包WEB-INF/classes 中的所有文件(不仅仅是 .class 文件)。更改后,我在实例化过程中收到一条错误消息,无法再读取logging.properties文件;可能是因为当时新的jar文件还没有被读取:

Unable to read the java.util.logging configuration file, WEB-INF/classes/logging.properties

作为解决方法,我将 appengine-web.xml 中的路径更改为WEB-INF/logging.properties并配置 maven-war-plugin 以将文件复制到该位置:

                <webResources>
                    <resource>
                        <directory>lib</directory>
                        <targetPath>WEB-INF/lib</targetPath>
                    </resource>
                    <resource>
                        <!-- Workaround: During GAE deployment, all files in WEB-INF/classes will be packaged into WEB-INF/lib/_ah_webinf_classes-0000.jar, 
                            which prevents the logging.properties referenced in appengine-web.xml from being read. -->
                        <directory>src/main/resources</directory>
                        <includes>
                            <include>logging.properties</include>
                        </includes>
                        <targetPath>WEB-INF</targetPath>
                    </resource>
                </webResources>
Run Code Online (Sandbox Code Playgroud)