AI 辅助学习:Spring Boot 集成 PostgreSQL

2023-12-07 14:42:04 浏览数 (1)

大家好,我是伍六七。

阿七之前有一次,接手了同事写的代码,他使用 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 数据库连接池的依赖。
代码语言:javascript复制
<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配置示例:

代码语言:javascript复制
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配置示例:

代码语言:javascript复制
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,并将其注入到应用程序中。
代码语言:javascript复制
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 类中,并使用它来执行数据库操作。例如:
代码语言:javascript复制
@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 牛逼!

大家赶紧用起来吧!

0 人点赞