4

在 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 中,我没有这些类的任何代码行,一切正常

4

1 回答 1

5

它像以前一样工作,但使用 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 应用程序本身启动。

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

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

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

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

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

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


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

于 2017-10-16T09:25:03.913 回答