Spring引导连接池的理解

时间:2017-10-16 09:06:51

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

在Spring启动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 个答案:

答案 0 :(得分:3)

它的工作方式与以前一样,但是使用Spring Boot,Spring会为你完成更多任务 无论有没有Spring,DAO类UserRepository都不会直接操作数据源,也不会直接创建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给出了数据源实现的首选顺序:

  

也可以使用a自动配置生产数据库连接   汇集DataSource。这是选择特定的算法   实现:

     

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

     

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

     

如果Tomcat池数据源和HikariCP都不可用   如果Commons DBCP可用,我们将使用它,但我们不会   在生产中推荐它并且不赞成它的支持。

     

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

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