何时在java中打开数据库连接

何时在java中打开数据库连接,java,spring,database,Java,Spring,Database,在spring中,让带有@transitional注释的方法A不调用DAO并执行任何SQL查询。 然后,方法A从不建立数据库连接?注释不会导致建立数据库连接,因为它不知道要连接到哪个数据库 请记住,一个程序可能连接到多个数据库 在java中何时打开DB连接 这确实是一个广泛的问题。 答案取决于应用程序代码配置数据库连接的方式。 通常,对于“真实”应用程序,您不会为每个客户端请求打开连接。 这将是低效的。 相反,当应用程序启动时,一个名为连接池的组件创建特定数量的连接,而该数量可以根据实际的客户端

在spring中,让带有@transitional注释的方法A不调用DAO并执行任何SQL查询。 然后,方法A从不建立数据库连接?

注释不会导致建立数据库连接,因为它不知道要连接到哪个数据库

请记住,一个程序可能连接到多个数据库

在java中何时打开DB连接

这确实是一个广泛的问题。
答案取决于应用程序代码配置数据库连接的方式。
通常,对于“真实”应用程序,您不会为每个客户端请求打开连接。
这将是低效的。
相反,当应用程序启动时,一个名为连接池的组件创建特定数量的连接,而该数量可以根据实际的客户端请求增加或减少。这些连接存储在内存中。 最后,当客户端代码请求连接时,池会提供连接

关于数据库事务,在spring中用
@Transactional
表示是另一回事。

关于:

让带有@transitional注释的方法A不调用DAO并执行 任何SQL查询。那么,方法A是否从不使用db连接

即使没有
@Transactional
查询也需要执行连接。

如果代码不执行任何查询,则借用池连接的风险很小。

答案是方法
a
不会使用数据库连接

假设您正在使用spring引导和spring数据JPA

使用默认配置(
spring.jpa.open in view
设置为true),每个请求都将与Hibernate会话对象绑定,并在该对象的帮助下处理数据库访问


如果发生数据库访问,会话对象将从连接池借用数据库连接,该连接池在应用程序的启动阶段初始化,如果没有发生,它将不会执行任何操作。

Spring没有
@过渡
注释。它确实有注释。