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 人+的央企子公司,之后又进了互联网大厂。

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

相关推荐
WaaTong7 分钟前
《重学Java设计模式》之 原型模式
java·设计模式·原型模式
m0_743048447 分钟前
初识Java EE和Spring Boot
java·java-ee
AskHarries9 分钟前
Java字节码增强库ByteBuddy
java·后端
佳佳_23 分钟前
Spring Boot 应用启动时打印配置类信息
spring boot·后端
小灰灰__29 分钟前
IDEA加载通义灵码插件及使用指南
java·ide·intellij-idea
夜雨翦春韭32 分钟前
Java中的动态代理
java·开发语言·aop·动态代理
程序媛小果1 小时前
基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
java·vue.js·spring boot
追风林1 小时前
mac m1 docker本地部署canal 监听mysql的binglog日志
java·docker·mac
芒果披萨1 小时前
El表达式和JSTL
java·el
许野平2 小时前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono