如何限制运行微服务的spring boot应用程序创建的数据库连接

Posted

技术标签:

【中文标题】如何限制运行微服务的spring boot应用程序创建的数据库连接【英文标题】:how to limit the database connection created by spring boot application running microservices 【发布时间】:2019-10-20 03:19:37 【问题描述】:

我正在我的学校项目中使用微服务架构(使用 maven 和 spring boot JPA)制作应用程序 我正在使用的硬件: aws RDS(最大数据库连接为 66,这导致了我的问题) aws ec2-instance 免费层 我有 3 个微服务:员工、薪水和休假。 但是,只运行了 3 个微服务,我的数据库连接数达到了 40+。 我不知道如何限制服务可以创建的数据库连接数。

经过一番研究,我遇到了“连接池”这个词,所以我尝试设置tomcat连接池。

这是配置(我都做了)但它不起作用 我是否可以说如果配置正确,我的应用程序最多只能建立 5 个活动连接?

spring.datasource.tomcat.initial-size=5
spring.datasource.tomcat.max-wait=20000
spring.datasource.tomcat.max-active=5
spring.datasource.tomcat.max-idle=5
spring.datasource.tomcat.min-idle=1
spring.datasource.tomcat.default-auto-commit=true   

这是查询代码

public interface EmployeeRepository extends JpaRepository<Employee, Integer> 
    @Query(
            value = "select * from itsa.Employee;",
            nativeQuery = true)
    List<Employee> findAllEmployee();

    @Query(
            value = "SELECT * FROM Employee where id = :id",
            nativeQuery = true)
    List<Employee> findEmp(@Param("id") int id);

【问题讨论】:

【参考方案1】:

Spring boot 中的默认 CP 是 HikariCP。一旦你在 pom.xml 中包含 spring-boot-starter-data-jpa,你就会为你配置默认值的 HikariCP。

如果你想让你的配置生效,你需要排除 HikariCP 并包含 tomcat-cp。为此,您需要对 pom.xml 进行以下更改。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
    <version>9.0.10</version>
</dependency>

希望这有助于解决您的问题。

【讨论】:

以上是关于如何限制运行微服务的spring boot应用程序创建的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

如何从 IntelliJ 运行/部署 Spring Boot 微服务到本地 Kubernetes 集群?

如何在单个 JUnit 测试中运行两个 Spring Boot 微服务?

Spring Boot 如何极简入门?

基于 Spring Boot 的微服务集成测试

spring Boot(十九):使用Spring Boot Actuator监控应用

如何使用 Spring Boot 微服务 Extern log4j.properties 文件并将其作为 Linux 服务运行?