线程池连接vs Singleton设计模式获得单个数据库连接

时间:2018-10-04 08:03:10

标签: java design-patterns singleton threadpool connection-pooling

这两个之间我真的很困惑,如下所示: 1.是在JAVA应用程序的整个运行期间仅将Singleton实例返回到db连接 2.线程池连接的概念是一般性的...我的意思是,如果我们打算只将一个单例实例连接到数据库连接obj,为什么还要有池的概念,尽管我确实获得了使用池的确切含义为

这两个概念不是很对立,还是我在这里混淆了什么...?

1 个答案:

答案 0 :(得分:0)

在Java应用程序的整个运行期间是否仅将Singleton实例返回到数据库连接?

您可能不希望为数据库连接返回Singleton对象。如果不需要数据库并发,则可以选择执行。在多线程环境中,最好的选择是连接池。

通常是线程池连接的概念。

建立数据库连接是非常耗费资源的过程,并且涉及很多开销。而且,在多线程环境中,打开和关闭连接会使情况更加恶化。

在服务器中创建JNDI并在您的Web应用程序中使用它。

Context context=new InitialContext();
DataSource dataSource=(DataSource)
   context.lookup("jdbc/test_jndi");

因此,当DataSource使用connection pooling时,查找从可用连接对象池中返回一个连接。如果没有可用的连接,则查找将创建一个新的连接。

Connection connection=dataSource.getConnection
   ("testuser","testpwd");
// ...
connection.close();

应用程序完成数据库处理后,将显式关闭连接。这将使连接再次可用以再次使用。池化连接的关闭事件会向池化模块发出信号,以还原到连接池。

任何共享的资源都需要处理并发访问的开销,因此您希望通过不总是使用singletons来减少这种开销。此外,为了减少资源密集型过程,connection pooling是首选。