当前位置: 首页 > 知识库问答 >
问题:

SQLAzure和连接池

田鹤轩
2023-03-14

我一直在到处寻找,收集零碎的东西,如果这已经在其他地方得到了回答,但我找不到,我很抱歉。

我正在用Java编写一个web应用程序,在后端使用Tomcat和SQLAzure。

有多个servlet访问SQLAzure DB。我想使用由Tomcat 8.5管理的连接池

我的应用程序上下文。META-INF中的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");

ds.get连接。

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

>

  • 我不需要指定单独的站点。xml,因为我使用的是Tomcat8.5。对的

    当我以这种方式连接时,Azure将自动创建池。池中的连接数等不能(不需要?)可以进行配置。

    在我意识到我将有其他servlet需要访问数据库之前,我有一个servlet直接通过SQLServerConnectionPoolDataSource创建数据源并从那里获得连接。留档声明:

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

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

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

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

    谢谢

  • 共有1个答案

    曹奇文
    2023-03-14

    根据我的理解,SQL服务器的jdbc连接池是由JavaApplication创建的,而不是Azure创建的。我的建议是,您需要参考下面的Tomcat官方文档来理解JNDI资源

    1. JNDI资源:http://tomcat.apache.org/tomcat-8.5-doc/jndi-resources-howto.html
     类似资料:
    • 问题内容: 我在两个表之间有多对多关系。 表包含我的餐厅。 表包含不同的类别。 表包含两列,每列分别包含两个表的ID。 以下陈述是我能想到的,但没有给我我想要的输出。 我希望输出是有关餐厅的信息,并在最后一列中是类别的连接行。 问题答案: 要串联值,可以使用。xml路径解决方案有误,应使用和特殊字符。 您也可以使用变量解决方案

    • 请原谅,这很可能是一个愚蠢的新手问题。 我们使用Hystrix作为两个服务之间的断路器。为了提高性能,我们使用了连接池。我们正在使用Apache HttpClient的PoolingHttpClientConnectionManager来处理连接池。 我们还使用Hystrix的“TimeoutInMissels”属性来捕获问题。 我们遇到的“问题”是,在正常操作中,创建一个新的HTTPS连接需要c

    • 本文向大家介绍说下左连接和右连接相关面试题,主要包含被问及说下左连接和右连接时的应答技巧和注意事项,需要的朋友参考一下 比如有两张表 A,B。左连接是把符合条件的所有A表的内容列出来,B表如果没有内容匹配用NULL代替。 右连接是符合条件的所有B表的内容列出来,A表如果没有内容匹配用NULL代替

    • 我正在尝试识别应用程序中的SQL连接泄漏。经过一些操作后,当我的应用程序处于空闲状态(用户未执行任何活动)时,我在返回的结果集中看到7个与我的数据库的连接。所有连接的状态均为,所有连接的值均为。 我正在使用连接池,但连接字符串中未指定连接生存期。这意味着如果我是对的,将使用它的默认值0。连接生存期的值为零意味着SQL server永远不应该关闭连接,对吗? 我让我的应用程序空闲一段时间(15-20

    • 有没有办法阻止SQL Azure DB,这样它就不会向我们的帐户收取任何费用?我不想删除它,就在测试和未使用时,我们将其设置为“停止”,就像我们可以对网站、云服务和虚拟机所做的那样。

    • 我有一个使用Hibernate作为ORM的javaSpring启动应用程序。数据库是一个AzureSQL服务器。 我已经在供应商适配器配置上启用了setShowSql。 当我想查找对象时,我使用了TypeQuery的方法和并调用方法。 控制台中打印的查询不包含OFFSET和ROW FETCH子句,Hibernate似乎首先检索所有结果,然后对结果列表应用分页。 这显然会导致性能问题。 我哪里做错了