当前位置: 首页 > 知识库问答 >
问题:

Spring Boot连接池理解

屈畅
2023-03-14

在Spring boot application.properties文件中,我们有以下选项:

server.tomcat.max-threads = 100
server.tomcat.max-connections = 100
spring.datasource.tomcat.max-active = 100
spring.datasource.tomcat.max-idle = 30

这是我的存储库类

public interface UserRepository extends JpaRepository<Users,Integer>{}

这是服务类

@Service
@Transactional(rollbackFor = Exception.class)
public class UserService {

    @Autowired
    private UserRepository userRepository;
    public User getUserById(Integer id){return userRepository.findOne(id)}

问题是,userRepository如何创建到DB的连接,以及它是否会使用我的应用程序属性文件中的连接池。我来自JDBC和hibernate,在那里我使用DataManager、DataSource、Connection类来使用连接池,但是在spring boot中,我没有使用这些类的任何代码行,一切都很好

共有1个答案

古畅
2023-03-14

它和以前一样工作,但是使用Spring Boot,Spring为您提供了更多的任务。
UserRepository无论是否使用Spring,DAO类都不直接操作数据源,也不直接创建JDBC连接。
这些都由您正在使用的EntityManagerFactory实现操作。
使用Spring-Hibernate,您仍然需要配置EntityManagerFactory
现在使用Spring Boot,您不需要配置它。
已经为您完成了。

Spring Boot的新功能是现在还可以配置服务器数据源属性:

server.tomcat.max-threads = 100
server.tomcat.max-connections = 100
spring.datasource.tomcat.max-active = 100
spring.datasource.tomcat.max-idle = 30

因为Tomcat服务器可以由Spring Boot应用程序本身启动。

Spring Boot文档的这一部分给出了数据源实现的首选顺序:

生产数据库连接也可以使用池数据源自动配置。以下是选择特定实现的算法:

我们更喜欢Tomcat池数据源的性能和并发性,所以如果可用,我们总是选择它。

否则,如果HikariCP可用,我们将使用它。

最后,如果Commons DBCP2可用,我们将使用它。

更新:根据Spring Boot2.x,HikariCP是默认的连接池机制。

 类似资料:
  • 我使用作为我的数据源实现,我的代码获取连接并关闭连接,如下所示: 当我完成连接工作时,我将关闭它 我的问题是:确实是关闭的,所以当连接像一样关闭时,数据源是如何工作的。我听说datasource connection close并不是真正的close,只是release,但我在datasource类中找不到release API。我想知道datasource如何管理数据库连接的创建、关闭和释放。

  • 我们正在用Java重写来自PHP的web应用程序。我认为,但我不是很确定,我们可能会在连接池方面遇到问题。应用程序本身是多租户的,是“独立数据库”和“独立模式”的组合。 对于每个Postgres数据库服务器实例,可以有一个以上的数据库(命名为schemax_XXX),其中包含一个以上的模式(模式是租户)。注册时,可能会发生以下两种情况之一: 在编号最高的schema_XXX数据库中创建新的租户模式

  • 我对连接池有一些疑问。在SQL Server连接池文章中提到的内容类似于“打开新连接时,如果连接字符串与现有池不完全匹配,则会创建一个新池。每个进程、每个应用程序域、每个连接字符串以及使用集成安全性时、每个Windows标识将连接池化。” 现在我有了自己的windows窗体应用程序,它具有SQL连接。 > 所以当我打开应用程序时,SQL连接首次打开,并创建了一个池。所以,如果我关闭应用程序池会被自

  • 作为一个专业的服务端开发工程师,我们必须要对连接池、线程池、内存池等有较深理解,并且有自己熟悉的库函数可以让我们轻松驾驭这些不同的 池子。既然他们都叫某某池,那么他们从基础概念上讲,原理和目的几乎是一样的,那就是 复用。 以连接池做引子,我们说说服务端工程师基础必修课。 从我们应用最多的 HTTP 连接、数据库连接、消息推送、日志存储等,所有点到点之间,都需要花样繁多的各色连接。为了传输数据,我们

  • 连接池是客户端内的一个对象,主要是维持现有节点的连接。理论上来讲,节点只有死节点与活节点。 然而在现实世界中,事情绝不会这么明确。有时候节点是处在 “可能挂了但还未确认” 、 “连接超时但未知原因” 或 “最近挂过但现在可用” 的灰色地带中。而连接池的工作就是管理这些无规则的连接,并为客户端提供最稳定的连接状态。 如果一个连接池找不到一个活节点来发送查询,那么就会返回一个 NoNodesAvail

  • Swoole 在 v4 版本后内置了 Library 模块,使用 PHP 代码编写内核功能,使得底层设施更加稳定可靠,并且提供了内置协程连接池,本章节会说明如何使用对应的连接池。 也可以观看Swoole微课程视频教程学习内置连接池的使用。 ConnectionPool ConnectionPool,原始连接池,基于Channel自动调度,支持传入任意构造器(callable),构造器需返回一个连接