• AI 辅助学习:Spring Boot 集成 PostgreSQL 并设置最大连接数


    大家好,我是伍六七。

    阿七之前有一次,接手了同事写的代码,他使用 Spring Boot 集成了 PostgreSQL。结果我在线上发布的时候,DBA 给我报警说连接数超了,每个机器连接数都是 100。

    但是我没用过 PostgreSQL 呀?怎么办?这个不解决的话,其他需求的发布就会受影响。

    这个时候,我想到了最近爆火的 GPT。我赶紧问它。

    我正在使用 spring boot 连接 PostgreSQL 数据库,我需要限制连接数据库的最小和最大连接数,怎么实现?

    要求:

    1、使用 Spring Boot 项目

    2、给出数据库配置、连接池配置、Java实现的代码

    3、使用 apache 数据库连接池 datasource 配置

    一轮的回复可能并不能完全满足我们的要求,针对不同的问题可以多问几轮。

    整理之后的答复如下:

    要限制连接数据库的最小和最大连接数,可以通过在 Spring Boot 项目中配置数据源和连接池来实现。以下是实现的步骤:

    1. 添加依赖:在 pom.xml 文件中添加 PostgreSQL 和 Apache 数据库连接池的依赖。
    <dependencies>
        
        <dependency>
            <groupId>org.postgresqlgroupId>
            <artifactId>postgresqlartifactId>
            <version>版本号version>
        dependency>
        
        <dependency>
            <groupId>org.apache.commonsgroupId>
            <artifactId>commons-dbcp2artifactId>
            <version>版本号version>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    1. 配置数据源和连接池:在 application.properties 或 application.yml 文件中配置数据源和连接池的相关属性。

    application.properties配置示例:

    spring.datasource.url=jdbc:postgresql://localhost:5432/mydatabase
    spring.datasource.username=myusername
    spring.datasource.password=mypassword
    spring.datasource.driver-class-name=org.postgresql.Driver
    spring.datasource.initial-size=5
    spring.datasource.max-total=20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    application.yml配置示例:

    spring:
      datasource:
        url: jdbc:postgresql://localhost:5432/mydatabase
        username: myusername
        password: mypassword
        driver-class-name: org.postgresql.Driver
        initial-size: 5
        max-total: 20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    1. 创建数据源 bean:在 Spring Boot 的配置类中创建数据源 bean,并将其注入到应用程序中。
    import org.apache.commons.dbcp2.BasicDataSource;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import javax.sql.DataSource;
    
    @Configuration
    public class DataSourceConfig {
    
    @Value("${spring.datasource.username}")
        private String username;
        @Value("${spring.datasource.password}")
        private String password;
        @Value("${spring.datasource.url}")
        private String url;
        @Value("${spring.datasource.driver-class-name}")
        private String driver;
        @Value("${spring.datasource.max-total}")
        private int maxActive;
        @Value("${spring.datasource.initial-size}")
        private int inititalSize;
        
        
        @Bean
        public DataSource dataSource() {
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            dataSource.setDriverClassName(driver);
            dataSource.setInitialSize(inititalSize);
            dataSource.setMaxTotal(maxActive);
            return dataSource;
        }
        
        @Bean(name = "pgJdbcTemplate")
        public JdbcTemplate jdbcTemplate(@Qualifier("pgDataSource") DataSource pgDataSource) {
            return new JdbcTemplate(pgDataSource);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    通过以上步骤,你可以在Spring Boot项目中使用Apache数据库连接池配置数据源,并限制连接数据库的最小和最大连接数。

    1. 在你的应用程序中使用 JdbcTemplate。在你的应用程序中,使用 @Resource 注解将 JdbcTemplate 注入到你的服务或 DAO 类中,并使用它来执行数据库操作。例如:
    @Service
    public class MyService {
    
        @Resource
        private JdbcTemplate pgJdbcTemplate;
    
        public void doSomething() {
            // 使用dataSource执行数据库操作
            pgJdbcTemplate.queryForObject(sql, Integer.class, username, time)
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 运行应用程序并观察日志输出。启动你的应用程序,并观察应用程序的日志输出。如果 maxActive 属性生效,你应该能够在日志中看到与数据库连接池相关的信息,例如连接池的最大活动连接数。

    通过以上步骤,你可以验证 application.yml 中的 maxActive 属性是否生效。如果你在日志中看到了与 maxActive 属性相关的信息,那么说明该属性已成功生效。

    如果没有看到相关信息,可能是配置有误或其他原因导致属性未生效,你可以检查配置是否正确,并查看其他可能的错误信息。

    对于原来使用搜索引擎,这个效率真的是提高了不知道多少倍!阿七刚好就这个问题在搜索引擎搜索了好久,都没找到正确答案,还是 GPT 牛逼!

    大家赶紧用起来吧!


    关注我,送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题,靠着这份面试题,我从 30 人的小公司,进了 2000 人+的央企子公司,之后又进了互联网大厂。

    一份让我进大厂&央企的面试题

  • 相关阅读:
    【数字信号去噪】小波软阈值+硬阈值+改进阈值数字信号去噪【含Matlab源码 1025期】
    车牌号识别(低级版)
    finalshell上传文件失败的解决方法
    【金蝶BI方案】做生产订单分析,要分析哪些指标?
    antdpro使用AbortController取消请求
    2023-2028年中国高纯度巯基乙酸市场需求预测与投资方向研究报告
    什么是Jmeter ?Jmeter使用的原理步骤是什么?
    Maven基础简介+安装说明
    WZOI-227我家的门牌号
    文献 | 越想快乐,越不快乐
  • 原文地址:https://blog.csdn.net/Prepared/article/details/134286712