大家好,我是伍六七。
阿七之前有一次,接手了同事写的代码,他使用 Spring Boot 集成了 PostgreSQL。结果我在线上发布的时候,DBA 给我报警说连接数超了,每个机器连接数都是 100。
但是我没用过 PostgreSQL 呀?怎么办?这个不解决的话,其他需求的发布就会受影响。
这个时候,我想到了最近爆火的 GPT。我赶紧问它。
我正在使用 spring boot 连接 PostgreSQL 数据库,我需要限制连接数据库的最小和最大连接数,怎么实现?
要求:
1、使用 Spring Boot 项目
2、给出数据库配置、连接池配置、Java实现的代码
3、使用 apache 数据库连接池 datasource 配置
一轮的回复可能并不能完全满足我们的要求,针对不同的问题可以多问几轮。
整理之后的答复如下:
要限制连接数据库的最小和最大连接数,可以通过在 Spring Boot 项目中配置数据源和连接池来实现。以下是实现的步骤:
- 添加依赖:在 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>
- 配置数据源和连接池:在 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
- 创建数据源 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数据库连接池配置数据源,并限制连接数据库的最小和最大连接数。
- 在你的应用程序中使用 JdbcTemplate。在你的应用程序中,使用 @Resource 注解将 JdbcTemplate 注入到你的服务或 DAO 类中,并使用它来执行数据库操作。例如:
java
@Service
public class MyService {
@Resource
private JdbcTemplate pgJdbcTemplate;
public void doSomething() {
// 使用dataSource执行数据库操作
pgJdbcTemplate.queryForObject(sql, Integer.class, username, time)
}
}
- 运行应用程序并观察日志输出。启动你的应用程序,并观察应用程序的日志输出。如果 maxActive 属性生效,你应该能够在日志中看到与数据库连接池相关的信息,例如连接池的最大活动连接数。
通过以上步骤,你可以验证 application.yml 中的 maxActive 属性是否生效。如果你在日志中看到了与 maxActive 属性相关的信息,那么说明该属性已成功生效。
如果没有看到相关信息,可能是配置有误或其他原因导致属性未生效,你可以检查配置是否正确,并查看其他可能的错误信息。
对于原来使用搜索引擎,这个效率真的是提高了不知道多少倍!阿七刚好就这个问题在搜索引擎搜索了好久,都没找到正确答案,还是 GPT 牛逼!
大家赶紧用起来吧!
关注我,送你全套我整理的 Java 岗位面试资料。这是我自己之前整理的面试题,靠着这份面试题,我从 30 人的小公司,进了 2000 人+的央企子公司,之后又进了互联网大厂。