java - SQL Azure 和连接池

标签 java azure tomcat servlets jdbc

我一直在四处寻找并收集了一些零散的信息,如果这个问题已经在其他地方得到了回答,但我找不到它,我深表歉意。

我正在使用 Tomcat 使用 Java 编写 Web 应用程序,并在后端使用 SQL Azure。

有多个 Servlet 访问 SQL Azure 数据库。我想使用 Tomcat 8.5 管理的连接池

我的META-INF中的应用程序context.xml如下:

        <Context>

    <Resource name="jdbc/sqlazure"
    auth="Container"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    type="javax.sql.DataSource"
    maxIdle="30"
    username="[username]"
    password="[password]"
    url="jdbc:sqlserver://[database]:1433;database=BackInfo;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30"
    removeAbandonedTimeout="30"
    logAbandoned="true" /> 

</Context>

在Java代码中,我访问的典型方式是:

    InitialContext ic = new InitialContext();ds = (DataSource)ic.lookup("java:comp/env/jdbc/sqlazure");

尝试(连接 con = ds.getConnection())....

一切似乎都正常,所以让我在这里确认我的理解:

  1. 我不需要指定单独的 web.xml,因为我使用的是 Tomcat 8.5。正确吗?

  2. 当我以这种方式连接时,Azure 将自动创建一个池。池中的连接数等无法(不需要?)配置。

  3. 在我意识到我还有其他需要访问数据库的 servlet 之前,我有一个 servlet 直接通过 SQLServerConnectionPoolDataSource 创建数据源并从那里获取连接。文档指出:

SQLServerConnectionPoolDataSource is typically used in Java Application Server environments that support built-in connection pooling and require a ConnectionPoolDataSource to provide physical connections, such as Java Platform, Enterprise Edition (Java EE) application servers that provide JDBC 3.0 API spec connection pooling.

  • 这是否意味着当我直接使用 SQLServerConnectionPoolDataSource 请求连接时,它会检查 Tomcat 是否支持池,然后基本上使用 JDBC 机制创建由 Tomcat 管理的 SQL Azure 连接池?

  • 通过 Tomcat JNDI 查找获取数据源时,使用 context.xml 中指定的 SQLServerDriver。当Web应用程序启动时,它将检查context.xml并使用SQLServerDriver连接到SQL Azure,检查是否支持池,如果支持则Tomcat正在使用驱动程序自动创建它返回的连接池数据源?

  • 我还想到了另一个问题。让 Singleton DataSource 类返回对池连接 DataSource 的引用是否有意义,或者让每个 servlet 在其 init() 中查找数据源并将其存储在私有(private)变量中会更好吗?

    <
  • 谢谢

    最佳答案

    根据我的理解,SQL Server的jdbc连接池是由Java应用程序创建的,而不是Azure创建的。我的建议是你需要引用下面的Tomcat官方文档来了解JNDI Resources & JDBC DataSource。

    1. JNDI 资源:http://tomcat.apache.org/tomcat-8.5-doc/jndi-resources-howto.html
    2. JDBC 数据源:http://tomcat.apache.org/tomcat-8.5-doc/jndi-datasource-examples-howto.html

    关于java - SQL Azure 和连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41133552/

    相关文章:

    java - Tomcat Classloader 如何在同一个 JVM 中分离不同的 Webapps 对象范围?

    eclipse - Tomcat 服务器未在 eclipse Neon 上的目标运行时列出

    java - Phonegap 从 Java 代码中获取本地存储值?

    java - 为什么只能在方法签名中将某些异常声明为抛出

    Azure 上的 Silverlight Ria 服务身份验证

    c# - Azure 服务证书限制

    java - 我们可以从 java 调用 python 方法吗?

    java - 如何从属性文件获取文件路径并将其作为参数传递到方法中

    mysql - Azure 尝试创建 MySQL 数据库时失败

    silverlight - Clientaccesspolicy.xml 可在 Tomcat 上的某个端口下找到