Spring Boot 连接池理解
Posted
技术标签:
【中文标题】Spring Boot 连接池理解【英文标题】:Spring boot connection pool understanding 【发布时间】:2017-10-16 09:06:51 【问题描述】:在 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】:它的工作原理与以前一样,但使用 Spring Boot,Spring 可以为您完成更多任务。
不管有没有 Spring,UserRepository
的 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 应用程序本身启动。
This part of the Spring Boot documentation 给出数据源实现的优先顺序:
生产数据库连接也可以使用 池化数据源。这是选择特定算法的算法 实现:
我们更喜欢 Tomcat 池化数据源,因为它的性能和 并发,所以如果它可用,我们总是选择它。
否则,如果 HikariCP 可用,我们将使用它。
如果 Tomcat 池数据源和 HikariCP 均不可用 如果 Commons DBCP 可用,我们将使用它,但我们不会 在生产中推荐它,它的支持已被弃用。
最后,如果 Commons DBCP2 可用,我们将使用它。
更新: 在 Spring Boot 2.x 中,HikariCP 是默认的连接池机制。
【讨论】:
这是否意味着如果我不包括 spring.datasource.tomcat.max-active = 100 spring.datasource.tomcat.max-idle = 30 spring boot 为我使用默认值?以上是关于Spring Boot 连接池理解的主要内容,如果未能解决你的问题,请参考以下文章