繁体   English   中英

什么时候在 java 中打开 DB 连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM