【问题标题】:Spring boot connection pool understandingSpring Boot 连接池理解
【发布时间】: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 中我没有这些类的任何代码行并且一切正常

【问题讨论】:

    标签: java spring spring-boot database-connection connection-pool


    【解决方案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 为我使用默认值?
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2016-01-27
    • 2018-10-05
    • 1970-01-01
    • 2016-05-28
    • 2018-09-24
    • 2016-09-14
    • 1970-01-01
    相关资源
    最近更新 更多