You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一服务器上Spring Boot应用连接PostgreSQL启动卡顿问题

解决两个Spring Boot应用同时连接PostgreSQL不同数据库启动卡顿的问题

PostgreSQL本身完全支持同时为多个应用提供服务,连接不同数据库是标准场景,你遇到的后启动应用卡顿问题,大概率出在应用端配置或服务器资源限制上,以下是具体排查和解决步骤:

1. 检查应用Web端口冲突

从日志可见app2的Tomcat端口为8444,确认app1是否使用了相同的Web端口。如果两个应用端口重复,会导致后启动的应用无法正常绑定端口,出现启动卡顿。需确保两个应用的server.port配置不同,例如:

  • app1: server.port=8443
  • app2: server.port=8444

2. 优化数据库连接池配置

Spring Boot默认使用HikariCP连接池,不合理的连接池参数可能导致资源抢占。分别为两个应用配置合适的连接池参数:

# 以下参数可根据服务器资源调整,两个应用的连接池总和不要超过PostgreSQL的max_connections值
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000

3. 检查PostgreSQL连接数限制

PostgreSQL默认最大连接数max_connections为100,若两个应用的连接池总和接近或超过这个值,会导致新连接无法建立。登录PostgreSQL服务器执行以下命令排查:

-- 查看当前活跃连接数
SELECT count(*) FROM pg_stat_activity;
-- 查看当前最大连接数配置
SHOW max_connections;

若连接数不足,修改PostgreSQL配置文件postgresql.conf中的max_connections值(需根据服务器内存调整,每个连接约占用几MB内存),之后重启PostgreSQL服务。

4. 缓解服务器资源压力

从日志可知服务器是1核1GB内存,资源非常有限,两个Spring Boot应用+PostgreSQL同时运行易导致资源耗尽:

  • 为每个应用设置JVM内存限制,启动时添加参数:java -Xmx512m -Xms256m -jar app.jar,避免单个应用占用过多内存。
  • 用top或htop命令查看服务器CPU、内存占用率,若资源接近耗尽,需升级服务器配置。

5. 调整Hibernate初始化配置

后启动的应用卡在Hibernate方言加载阶段,可能是Schema验证/初始化耗时过长:

  • 关闭不必要的DDL自动操作:
    spring.jpa.hibernate.ddl-auto=none
    
    若需要表结构验证,可设置为validate,避免自动创建/更新表的开销。
  • 关闭Hibernate统计日志,减少初始化资源消耗:
    spring.jpa.properties.hibernate.generate_statistics=false
    

6. 确认数据库用户权限

确保两个应用使用的数据库用户拥有对应数据库的完整访问权限,避免权限问题导致连接后卡住:

-- 为app1用户授权db1访问权限
GRANT ALL PRIVILEGES ON DATABASE db1 TO app1_user;
-- 为app2用户授权db2访问权限
GRANT ALL PRIVILEGES ON DATABASE db2 TO app2_user;

内容的提问来源于stack exchange,提问作者green.it

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:19:53