spring—在java中何时打开db连接

wljmcqd8  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(340)

在spring中,让带有@transitional注解的方法不调用dao并执行任何sql查询。那么,方法a从不使用db连接吗?

n1bvdmb6

n1bvdmb61#

这个 @Transactional 注解不会导致建立数据库连接,因为它不知道要连接到哪个数据库。
请记住,一个程序可能连接到多个数据库。

ubbxdtey

ubbxdtey2#

在java中何时打开db连接?
这确实是一个宽泛的问题。
答案取决于应用程序代码配置db连接的方式。
一般来说,对于“真正的”应用程序,您不会为每个客户端请求打开一个连接。
这将是低效的。
相反,当应用程序启动时,名为连接池的组件会创建特定数量的连接,而该数量可以根据实际的客户端请求增加或减少。这些连接存储在内存中。最后,当客户端代码请求连接时,池会提供连接。
关于数据库事务,在spring中表示为 @Transactional 是另一回事。它表示在数据库管理系统中执行的工作单元。
关于:
让带有@transitional注解的方法不调用dao并执行任何sql查询。那么,方法a从不使用db连接吗?
即使没有 @Transactional 查询需要连接才能执行。
如果代码不执行任何查询,那么它借用到池的连接的风险很小。

s3fp2yjn

s3fp2yjn3#

答案是方法 A 不会使用db连接。
假设您使用的是带有spring数据jpa的spring boot。
使用默认配置( spring.jpa.open-in-view 设置为true),每个请求都将与一个hibernate会话对象绑定,并且在该对象的帮助下处理数据库访问。
如果发生数据库访问,session对象将从连接池借用数据库连接,连接池是在应用程序的启动阶段初始化的,如果没有发生这种情况,session对象将不会执行任何操作。

相关问题