Java 在多线程场景中,使用Tomcat JDBC数据源对象的静态实例是否安全?

Java 在多线程场景中,使用Tomcat JDBC数据源对象的静态实例是否安全?,java,tomcat,jdbc,Java,Tomcat,Jdbc,我正在使用Tomcat JDBC连接池 在多线程场景中,使用DataSource对象的静态实例是否安全 这就是我在需要时获得连接的方式: public static Connection getConnection() throws SQLException { return datasource.getConnection(); } 在我运行查询后,我会确保服务器关闭连接。一般来说,是的。虽然DataSource接口没有明确指定这一点,但通常您会在应用程序服务器

我正在使用Tomcat JDBC连接池

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

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

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

在我运行查询后,我会确保服务器关闭连接。

一般来说,是的。虽然DataSource接口没有明确指定这一点,但通常您会在应用程序服务器中使用一些连接池数据源实现,这通常设计为在多线程环境中工作良好。从纸面上看,某些实现实际上可能是可变的,但通常情况下不应该是可变的。

您的数据源是否标记为final?出于安全发布的目的,数据源引用应该标记为final;它不是线程安全的then@rvit34它可能不是线程安全的,但是如果该字段只分配了一次,那么除了可能的发布问题之外,它可能是线程安全的;我将属性设置如下:public static void initializeConnectionProperties{PoolProperties poolProp=setPoolPropertiesproperties;datasource.setPoolPropertiespoolProp;}在创建其他线程之前,仅在开始时调用一次。