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 数据库连接池的依赖。
xml 复制代码
<dependencies>
    <!-- PostgreSQL依赖 -->
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>版本号</version>
    </dependency>
    <!-- Apache数据库连接池依赖 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
        <version>版本号</version>
    </dependency>
</dependencies>
  1. 配置数据源和连接池:在 application.properties 或 application.yml 文件中配置数据源和连接池的相关属性。

application.properties配置示例:

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

application.yml配置示例:

yaml 复制代码
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. 创建数据源 bean:在 Spring Boot 的配置类中创建数据源 bean,并将其注入到应用程序中。
java 复制代码
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);
    }
}

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

  1. 在你的应用程序中使用 JdbcTemplate。在你的应用程序中,使用 @Resource 注解将 JdbcTemplate 注入到你的服务或 DAO 类中,并使用它来执行数据库操作。例如:
java 复制代码
@Service
public class MyService {

    @Resource
    private JdbcTemplate pgJdbcTemplate;

    public void doSomething() {
        // 使用dataSource执行数据库操作
        pgJdbcTemplate.queryForObject(sql, Integer.class, username, time)
    }
}
  1. 运行应用程序并观察日志输出。启动你的应用程序,并观察应用程序的日志输出。如果 maxActive 属性生效,你应该能够在日志中看到与数据库连接池相关的信息,例如连接池的最大活动连接数。

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

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

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

大家赶紧用起来吧!


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

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

相关推荐
凯酱4 分钟前
MyBatis-Plus分页插件的使用
java·tomcat·mybatis
程序员总部14 分钟前
如何在IDEA中高效使用Test注解进行单元测试?
java·单元测试·intellij-idea
oioihoii16 分钟前
C++23中if consteval / if not consteval (P1938R3) 详解
java·数据库·c++23
佳腾_24 分钟前
【Web应用服务器_Tomcat】一、Tomcat基础与核心功能详解
java·前端·中间件·tomcat·web应用服务器
追逐时光者28 分钟前
MongoDB从入门到实战之Docker快速安装MongoDB
后端·mongodb
方圆想当图灵42 分钟前
深入理解 AOP:使用 AspectJ 实现对 Maven 依赖中 Jar 包类的织入
后端·maven
豌豆花下猫1 小时前
Python 潮流周刊#99:如何在生产环境中运行 Python?(摘要)
后端·python·ai
嘻嘻嘻嘻嘻嘻ys1 小时前
《Spring Boot 3 + Java 17:响应式云原生架构深度实践与范式革新》
前端·后端
异常君1 小时前
线程池隐患解析:为何阿里巴巴拒绝 Executors
java·后端·代码规范
mazhimazhi1 小时前
GC垃圾收集时,居然还有用户线程在奔跑
后端·面试