【问题标题】:In a multi thread scenario is it safe to use a static instance of the Tomcat JDBC DataSource object?在多线程场景中,使用 Tomcat JDBC DataSource 对象的静态实例是否安全?
【发布时间】:2017-07-26 09:49:06
【问题描述】:

我正在使用 Tomcat JDBC 连接池。

在多线程场景中,使用 DataSource 对象的静态实例是否安全?

这就是我在需要时获得连接的方式:

 public static Connection getConnection() throws SQLException {
        return datasource.getConnection();
      }

运行查询后,我确保关闭连接。

【问题讨论】:

  • 您的数据源是否标记为最终数据源?出于安全发布的目的,应将数据源引用标记为 final。
  • 不是,我是这样定义的:private static DataSource datasource;
  • 这不是线程安全的
  • @rvit34 它可能不是线程安全的,但如果该字段只分配一次,那么它可能是线程安全的(除了可能的发布问题)。
  • 我将数据源实例化修改为:private static final DataSource datasource = new DataSource();我将属性设置如下: public static void initializeConnection(Properties properties) { PoolProperties poolProp = setPoolProperties(properties);数据源.setPoolProperties(poolProp);在创建其他线程之前,这只会在开始时调用一次。

标签: java tomcat jdbc


【解决方案1】:

一般来说,是的。虽然 DataSource 接口没有明确指定这一点,但通常您会在应用程序服务器中使用一些连接池 DataSource 实现,它通常被设计为在多线程环境中运行良好。在纸面上,一些实现实际上可能是可变的,但通常情况并非如此。

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多