Spring Boot+Docker-compose出现Unknown database数据库连接错误如何解决?
解决Spring Boot CQRS查询模块Docker连接数据库报错问题
执行docker-compose --build启动基于CQRS的Spring Boot查询模块时,出现如下错误:
java.sql.SQLSyntaxErrorException: Unknown database 'bankAccount'
问题根源是MySQL容器启动时未自动创建bankAccount数据库,导致Spring Boot应用连接时找不到目标库。以下是具体解决方案:
方案一:配置MySQL自动创建数据库(推荐)
修改docker-compose.yml中database服务的环境变量,添加MYSQL_DATABASE指定要创建的数据库名称,MySQL容器启动时会自动初始化该库。修改后的配置片段:
database: container_name: mysql-database image: 'mysql:latest' ports: - "3306:3306" restart: always environment: MYSQL_PASSWORD: root MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: bankAccount # 新增这行,指定自动创建的数据库名 volumes: - db-data:/var/lib/mysql networks: - bankQuery healthcheck: test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ] timeout: 20s retries: 10
方案二:添加应用连接重试机制
即使配置了depends_on,也只能保证MySQL容器启动,无法确保数据库服务完全就绪。可以为Spring Boot应用添加连接重试,避免因数据库未就绪导致的启动失败:
在app服务的环境变量中添加Hikari连接池配置:
app: # 其他配置不变 environment: # 原有环境变量保留 - spring.datasource.hikari.connection-timeout=20000 - spring.datasource.hikari.initialization-fail-timeout=0 # 无限重试直到连接成功 restart: on-failure # 启动失败时自动重启
方案三:手动创建数据库(临时应急)
如果不想修改配置,可以手动进入MySQL容器创建数据库:
- 单独启动MySQL容器:
docker-compose up -d database - 进入容器终端:
docker exec -it mysql-database bash - 登录MySQL:
mysql -uroot -proot - 创建目标数据库:
CREATE DATABASE bankAccount; - 启动应用服务:
docker-compose up app
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

