【问题标题】:How does JDBC URL properties workJDBC URL 属性如何工作
【发布时间】:2011-01-26 23:10:31
【问题描述】:

在我的应用架构中,一个 URL 指向一个公司数据源。因此,为了解决在同一个数据库上拥有多个公司的问题,我想探索向 JDBC Url 添加额外参数的可能性。

基本上我想做的是与以下网址建立连接。

jdbc:sqlserver://192.168.128.2:1433;databaseName=businessesDB;companyId=25

我已经测试过,将自定义参数添加到 jdbc URL 不会影响连接。但我的问题是如何访问我的应用程序上的 companyId 属性。

我可以使用从数据源获得的 Connection 对象检索该属性的值吗?

【问题讨论】:

    标签: url jdbc properties


    【解决方案1】:

    您似乎正在使用 Microsoft SQL Server 驱动程序。查看http://msdn.microsoft.com/en-us/library/ms378988.aspx,您应该能够使用 applicationName 属性来识别哪个企业正在使用该连接。这样做的好处是 SQL Server 分析和日志记录工具也将识别连接中的业务。

    为了以编程方式获取应用程序名称,或者在您的情况下获取业务,您可以使用 java.sql.Driver.getPropertyInfo(url, properties)。

    【讨论】:

    • java.sql.Driver 和 com.microsoft.sqlserver.jdbc.SQLServerDriver 都有一个 getPropertyInfo 方法。设置 applicationName 属性是一个很好的做法,但它不适合我将要给出的用途,也许我应该重新提出这个问题。
    • 这里是 getPropertyInfo 方法的 Microsoft 文档。希望能帮助到你。 msdn.microsoft.com/en-us/library/ms378773.aspx
    【解决方案2】:

    我将发布我如何解决它。但是我仍然觉得应该有一个更好的解决方案,无论实际数据库如何,都可以工作,因为 Mysql Jdbc URL 像 http URL 一样分隔它们的参数,而 SQL Server JDBC 驱动程序期望属性与 ; 分隔。特点。毕竟这就是 JDBC 存在的原因。

    使用应用于 URL 的正则表达式,我得到如下参数:

            String url = company.getJdbcUrl();
    
            Pattern p = Pattern.compile("companyId=(\\d+)");
            Matcher m = p.matcher(url);
    
            if (m.find()) {
                companyId = m.group(1);
                _logger.info("companyId found");
            } else {
                _logger.error("could not get companyId");
            }
    

    【讨论】:

    • 那么为什么要在 JDBC url 中添加与业务相关的配置属性呢?为什么不使用 company.getBusinessName()?每个公司都可以配置一个 JDBC url 和一个企业名称。
    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 2011-02-10
    • 2011-07-10
    • 2012-04-22
    • 1970-01-01
    • 2010-09-29
    • 2013-01-30
    • 2014-07-12
    相关资源
    最近更新 更多