java - 在 Google App Engine 应用程序中注册 jdbc 驱动程序的正确方法

标签 java google-app-engine google-cloud-sql

我正在开展一个项目,我们将 GAE 与 Google Cloud SQL 结合使用。我已遵循本教程 https://developers.google.com/appengine/docs/java/cloud-sql/developers-guide#use_with_lang学习如何连接到数据库,到目前为止一切都很好,除了驱动程序注册部分。我的直觉告诉我,驱动程序应该只注册一次,但我不知道何时何地是最好的注册地点。 gae中是否有一种初始化功能可以在实例启动时执行一些代码?或者可能是一个可以加载资源的 xml 文件?

到目前为止,我的代码如下所示:

    try {
        // Connect to the db.
        DriverManager.registerDriver(new AppEngineDriver());
        Connection c = DriverManager.getConnection(JDBC_CON_STRING);

        // Fetch rows
        String sql = "SELECT * FROM test";
        ResultSet rs = c.createStatement().executeQuery(sql);
        ArrayList<BaseUser> users = new ArrayList<BaseUser>();
        while(rs.next()){
            BaseUser u = new BaseUser();
            u.setFirstname(rs.getString("firstname"));
            u.setLastname(rs.getString("lastname"));
            users.add(u);
        }
        rs.close();
        c.close();
        // Print the users in the console.
        for (BaseUser user : users) {
            logger.info("Firstname: " + user.getFirstname() + ", Lastname: " + user.getLastname());
        }

    } catch (SQLException e) {
        e.printStackTrace();
    }

我想去掉第一行,把它放在只执行一次的地方,然后,每次我收到需要 sql 事务的请求时,我只需要调用 DriverManager.getConnection(... )

谢谢, 罗德里戈。

最佳答案

所以我终于在谷歌的文档中找到了一种“在调用任何 servlet 之前运行自定义逻辑”的更好方法。在这里:只需在 web.xml 中注册一个 ServletContextListener 并覆盖 contextInitialized 方法,在我的例子中是自定义驱动程序注册。

这是 web.xml 代码:

<web-app>
    ...
   <welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
   </welcome-file-list>

   <listener>
       <listener-class>com.my.project.ClassName</listener-class>
   </listener>
</web-app>

和上下文初始化方法:

@Override
public void contextInitialized(ServletContextEvent arg) {
    try {
        DriverManager.registerDriver(new AppEngineDriver());
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

这是实际谷歌指南的链接:https://developers.google.com/appengine/docs/java/config/appconfig#Using_a_ServletContextListener

希望对遇到类似问题的人有所帮助。

关于java - 在 Google App Engine 应用程序中注册 jdbc 驱动程序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14015503/

相关文章:

google-app-engine - 用Python实现谷歌云机器学习引擎的在线预测

python - 如何让我的 App Engine 事务重试?

python - gae 我可以将本地mysql迁移到cloudsql吗

google-cloud-platform - 不同项目内的 Cloud SQL 连接

java - MySql - Java - 未找到类异常

java - 从 Java 使用 LLVM

google-app-engine - GAE Cloud Endpoints API Explorer 停止工作

google-compute-engine - Google cloud_sql_proxy 无法连接到实例,流错误,protocol_error

java - for循环中停留在第一个元素的百分比计算

java - 强连通分量