2016-12-14 119 views
0

我一直在搜索高低,并收集了点点滴滴,如果已经在其他地方已经回答了道歉,但我无法找到它。SQL Azure和连接池

我正在用Tomcat和SQL Azure在后端编写一个Java应用程序。

有多个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. 因为我使用的是Tomcat 8.5,所以我不需要指定单独的web.xml。正确吗?

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

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

SQLServerConnectionPoolDataSource通常在支持内置的连接池和要求的ConnectionPoolDataSource提供物理连接,如Java平台企业版(Java EE)应用程序的Java应用服务器环境中使用提供JDBC 3.0 API规范连接池的服务器。

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

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

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

  • 感谢

    回答

    0

    根据我的理解,SQL Server的JDBC连接池是通过Java应用程序创建的,不天青一样。我的建议是,您需要参考下面的Tomcat官方文档来了解JNDI资源& 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
    +0

    感谢彼得,我读过这和有没有问题,通过JNDI访问,但一些配置参数我用诸如大小在联系Azure端时池似乎不被接受,这让我认为Azure会自动管理池?否则,为什么不从Tomcat中最大化连接池的大小呢? – fobius