繁体   English   中英

如何浏览本地Java App Engine数据存储区?

[英]How to browse local Java App Engine datastore?

对于Google App Engine的Java实现,似乎没有相应的Python App Engine的_ah / admin。

有没有手动方式我可以浏览数据存储区? 我的机器上的文件在哪里? (我在OS X上使用Eclipse的App Engine插件)。

http://googleappengine.blogspot.com/2009/07/google-app-engine-for-java-sdk-122.html :“最后,dev appserver有一个数据查看器。在本地启动你的应用程序并指出你的浏览器到http://localhost:8888/_ah/admin http://localhost:8000/datastore *来查看它。“

*截至1.7.7

目前没有Java SDK的数据存储区查看器 - 应该会在下一个SDK版本中出现。 与此同时,您最好的选择是使用数据存储区查看代码编写自己的管理界面 - 或者等待下一个SDK版本。

Java App Engine现在有一个本地数据存储区查看器,可从http://localhost:8080/_ah/admin

我在Windows + Eclipse环境中的\\ war \\ WEB-INF \\ appengine-generated \\ local_db.bin上有本地数据存储区

据我所知,它使用名为“协议缓冲区”的内部格式。 我没有外部工具以人类可读的格式呈现文件。

我正在使用这样简单的“查看器”代码:

public void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws IOException 
{

    resp.setContentType("text/plain");

    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
    final Query query = new Query("Table/Entity Name");
    //query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.DESCENDING);

    for (final Entity entity : datastore.prepare(query).asIterable()) {
        resp.getWriter().println(entity.getKey().toString());

        final Map<String, Object> properties = entity.getProperties();
        final String[] propertyNames = properties.keySet().toArray(
            new String[properties.size()]);
        for(final String propertyName : propertyNames) {
            resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
        }
    }
}

在最新版本的SDK( 1.7.6+ )中,开发服务器的管理部分随之改变了它的位置

分析服务器输出日志,我们可以看到它可以在以下位置访问:

http://localhost:8000

数据存储区查看器:

http://localhost:8000/datastore

看起来很整洁 - 根据谷歌的新设计指南。

由于Google App Engines数据存储区查看器不支持显示引用实体的集合,因此我修改了Paul的版本以显示所有后代实体:

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    String entityParam = req.getParameter("e");

    resp.setContentType("text/plain");
    final DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();

    // Original query
    final Query queryOrig = new Query(entityParam);
    queryOrig.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

    for (final Entity entityOrig : datastore.prepare(queryOrig).asIterable()) {

        // Query for this entity and all its descendant entities and collections
        final Query query = new Query();
        query.setAncestor(entityOrig.getKey());
        query.addSort(Entity.KEY_RESERVED_PROPERTY, Query.SortDirection.ASCENDING);

        for (final Entity entity : datastore.prepare(query).asIterable()) {
            resp.getWriter().println(entity.getKey().toString());

            // Print properties
            final Map<String, Object> properties = entity.getProperties();
            final String[] propertyNames = properties.keySet().toArray(new String[properties.size()]);
            for(final String propertyName : propertyNames) {
                resp.getWriter().println("-> " + propertyName + ": " + entity.getProperty(propertyName));
            }
        }
    }
}

应该注意,没有为空集合/引用实体显示任何内容。

使用文本编辑器(如Notepad ++)打开\\war\\WEB-INF\\appengine-generated\\local_db.bin文件。

数据是乱码的,但至少你可以阅读它,你可以复制以提取它。

对我来说,修复是使用下面的gcloud命令进行登录

gcloud auth application-default login

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM