[英]Java connection pool is not limiting the number of TCP connections opened to the DB server
[英]When is a DB connection is opened in java
在 spring 中,让带有 @transitional 注释的方法 A 不调用 DAO 并执行任何 SQL 查询。 那么,方法A从不连接数据库吗?
@Transactional
注释不会导致建立数据库连接,因为它不知道要连接到哪个数据库。
请记住,一个程序可能连接到多个数据库。
什么时候在 java 中打开 DB 连接?
这确实是一个广泛的问题。
答案取决于应用程序代码配置与数据库连接的方式。
通常对于“真实”应用程序,您不会为每个客户端请求打开连接。
这将是低效的。
相反,当应用程序启动时,称为连接池的组件会创建特定数量的连接,而该数量可以根据实际客户端请求增加或减少。 而这些连接存储在 memory 中。 最后,当客户端代码请求连接时,池提供它。
关于数据库事务,在 spring 中由@Transactional
表示是另一回事。 它象征着在数据库管理系统中执行的一个工作单元。
关于:
让带有 @transitional 注释的方法 A 不调用 DAO 并执行任何 SQL 查询。 那么,方法A从不连接数据库吗?
即使没有@Transactional
,查询也需要执行连接。
如果代码不执行任何查询,它借用连接池的风险很小。
答案是方法A
不会建立数据库连接。
假设您使用 spring 引导和 spring 数据 JPA。
With default configuration ( spring.jpa.open-in-view
is set to true), each request will be bound with a Hibernate Session object, and database access is processed with the help of the object.
如果有数据库访问发生,session object 将从应用程序启动阶段初始化的连接池中借用数据库连接,如果没有发生则什么也不做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.