Postgres JDBC DataSource实例

时间:2016-01-27 04:06:40

标签: spring postgresql datasource

我正在尝试使用Postgresql和Spring。

它的编写方式是为即将执行的每个查询/特定查询集启动DataSource实例。

所以,问题是,在应用程序的整个生命周期中只保留一个实例或者现在这样做是不是一个好主意?

如果在这里使用了很多实例,这会导致内存泄漏吗?

1 个答案:

答案 0 :(得分:1)

为每个请求实例化一个新DataSource是一个坏主意,因为建立与数据库服务器的连接的开销。您可以选择两种设计模式:

  1. 为您的应用程序的每个会话或实例实例化DataSource。优点是您可以使用原始应用程序中使用的所有详细信息来定制实例。缺点是您可能需要许多会话 - 在服务器和客户端上占用资源 - 在请求之间的大部分时间内可能闲置 - 但仍然耗尽这些资源。
  2. 使用JNDITutorialconnection pool。会话之间共享与数据库的连接。这通常更有效,因为连接保持打开并且将更加密集地使用。在不利方面,每个连接都设置了所有连接详细信息 - 包括用户名和密码 - 这可能不适用于您的数据库设计。
  3. 澄清:

    • 如果您的应用程序的每个用户都有自己的role 他们应该在数据库中设置自己的角色名称和密码 打开连接:连接池是不可能的,你 应该为每个会话创建一个DataSource
    • 如果您的应用程序的用户在数据库中使用单个role - 请说" webuser" - 然后您可以使用连接池与该角色的详细信息。如果您的应用程序具有以下几个角色,这也会起作用:" webuser"," webmanager"," webadmin"。然后,您必须为JNDI存储中的每个角色创建DataSource