Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Postgres JDBC数据源实例_Spring_Postgresql_Datasource - Fatal编程技术网

Spring Postgres JDBC数据源实例

Spring Postgres JDBC数据源实例,spring,postgresql,datasource,Spring,Postgresql,Datasource,我正在尝试将Postgresql与Spring结合使用 其编写方式是为即将执行的每个查询/特定查询集启动DataSource实例 所以,问题是,在应用程序的整个生命周期中只保留一个实例是一个好主意还是像现在这样做 如果这里使用了许多实例,这会导致内存泄漏吗?为每个请求实例化一个新的数据源是一个坏主意,因为建立到数据库服务器的连接会带来开销。有两种设计模式可供选择: 为应用程序的每个会话或实例实例化。优点是,您可以使用原始应用程序中使用的所有细节来定制实例。缺点是,您可能需要许多会话—消耗服务器和

我正在尝试将Postgresql与Spring结合使用

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

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


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

为每个请求实例化一个新的
数据源是一个坏主意,因为建立到数据库服务器的连接会带来开销。有两种设计模式可供选择:

  • 为应用程序的每个会话或实例实例化。优点是,您可以使用原始应用程序中使用的所有细节来定制实例。缺点是,您可能需要许多会话—消耗服务器和客户端上的资源—在请求之间的大部分时间可能处于空闲状态—但仍然会消耗这些资源
  • 使用a()。到数据库的连接在会话之间共享。这通常效率更高,因为连接保持打开状态并将被更密集地使用。另一方面,每个连接都设置了所有连接详细信息(包括用户名和密码),这可能不适合您的数据库设计
  • 澄清:

    • 如果应用程序的每个用户在 数据库时,他们应该设置自己的角色名和密码 打开连接:连接池不可能,并且您 应该为每个会话创建一个
      数据源
    • 如果应用程序的用户在数据库中使用单个
      角色
      ,比如“webuser”,那么您可以使用连接池来获取该角色的详细信息。如果您的应用程序有几个这样的角色:“webuser”、“webmanager”、“webadmin”,那么这也会起作用。然后,您必须为JNDI存储中的每个角色创建一个
      数据源

    回答得很好,但要清楚,存储在符合JNDI的服务器中的
    数据源不一定由连接池支持。不要与连接池混淆。第一个实例提供第二个实例。实际上,“DataSource”一词用词不当,应该被命名为“ConnectionSource”。