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

Grails项目迁移至PostgreSQL后无法创建JDBC Statement启动失败求助

解决Grails 3.3.2切换PostgreSQL后启动失败的问题

你遇到的两个错误其实是连锁反应——核心问题出在数据库连接/DDL执行环节,进而导致Spring上下文初始化失败触发了ApplicationEventMulticaster的错误。下面是具体的排查和修复步骤:

1. 优先解决PostgreSQL JDBC驱动版本兼容问题

你当前使用的驱动版本9.1-901.jdbc4过于老旧,完全不适配Grails 3.3.2(基于Spring Boot 1.5.x)的环境,这大概率是导致Unable to create JDBC Statement for DDL execution的主要原因。

修复方案:
在build.gradle中替换驱动依赖为适配的新版本:

compile group: 'org.postgresql', name: 'postgresql', version: '42.2.24'

(注:42.2.x系列是Spring Boot 1.5.x官方推荐的PostgreSQL驱动版本,兼容性最好;如果你的PostgreSQL服务器是14+版本,可以升级到42.3.x系列)

2. 检查数据源配置的正确性

确认application.yml中的PostgreSQL配置没有遗留MySQL的内容,并且格式正确:

dataSource:
    pooled: true
    jmxExport: true
    driverClassName: org.postgresql.Driver
    username: your_db_user
    password: your_db_password
    url: jdbc:postgresql://localhost:5432/your_db_name

需要注意:

  • 确保数据库your_db_name已经在PostgreSQL服务器上创建
  • 数据库用户拥有创建表、执行DDL的权限(否则会在初始化时失败)
  • 检查主机地址、端口是否正确(默认PostgreSQL端口是5432)

3. 清理项目缓存并重新构建

旧的依赖缓存可能会导致问题,执行以下命令清理后重新启动:

grails clean
grails compile
grails run-app

错误原因解释

  • Unable to create JDBC Statement for DDL execution:老版本驱动不支持当前Grails/Spring Boot的JDBC操作规范,或者与你的PostgreSQL服务器版本不兼容,导致无法创建执行DDL的Statement。
  • ApplicationEventMulticaster not initialized:这是连锁错误——当数据库初始化失败时,Spring上下文无法完成refresh操作,进而导致事件广播器没有被正确初始化,解决核心的数据库问题后这个错误会自动消失。

内容的提问来源于stack exchange,提问作者shahidah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:31