带有 docker compose 的 Spring JPA:无法确定没有 JDBC 元数据的 Dialect(请设置 'jakarta.persistence.jdbc.url' 或 'hibernate.dialect'

问题描述 投票:0回答:1

我无法使用 Spring JPA 将我的 Spring Boot 应用程序连接到 PostgreSQL 数据库。

下面是我的 application.yaml 文件。

spring:
  application:
    name: jaah
  datasource:
    url: jdbc:postgresql://db:5432/taah
    username: waah
    password: blah
    driverClassName: org.postgresql.Driver
  jpa:
    database-platform: org.hibernate.dialect.PostgreSQLDialect
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        ddl-auto: none
        boot:
          '[allow_jdbc_metadata_access]': false
  sql:
    init:
      mode: never
  main:
    allow-bean-definition-overriding: true
logging:  
    level:    
      org:
        hibernate: DEBUG
server:
  port: 8080
  address: 0.0.0.0

下面是 docker compose.yaml 文件。数据库托管在容器内部的 5432 柱上,以及外部的 5434 柱上。

db:
    image: postgres
    container_name: db
    ports:
      - 5434:5432
    restart: always
    env_file:
      - .env
    volumes:
      - postgresdata:/var/lib/postgresql/data
 
    environment:
       - POSTGRES_DB=taah
       - POSTGRES_USER=waah
       - PGUSER=waah
       - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}                  #from env
    healthcheck:
      test: ["CMD-SHELL","psql -h localhost -U $${POSTGRES_USER} -c select 1 -d $${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - mynetwork

spring_boot_server:
    image: backend
    build: .
    depends_on: 
      db:
        condition: service_healthy
    ports:
      - "8080:8080"  
    networks:
      - mynetwork
    environment:
      - SERVER_PORT=8080  
networks:
  mynetwork:
    driver: bridge
下面

我的DockerFile

FROM openjdk:21
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

当我分别运行 docker compose 和服务器时,即当我运行 postgres docker 容器,然后 spring 应用程序在端口 5434 连接到数据库时,该应用程序工作。

这是服务器启动前的最后一条消息

db                    | 2024-09-15 11:14:15.980 UTC [1] LOG:  database system is ready to accept connections
 I bash'd into the postgres container sudo docker exec -it db /bin/sh

psql -h db -p 5432 -U waah -d taah Password for user waah:
 waah=# \dt Did not find any relations.

这是在我使用

重新启动容器之后
  1. sudo docker-compose down --volumes
  2. sudo docker-compose 构建
  3. sudo docker-compose up

我还将数据库网址更改为

jdbc:postgresql://localhost:5432/taah
但没有任何效果

postgresql spring-boot jpa docker-compose spring-data-jpa
1个回答
0
投票

我的环境:

  • Docker 版本 27.2.1,内部版本 9e34c9b
  • docker-compose 版本 1.25.0,构建未知

docker-compose.yaml

version: '3.3' # Add version

services:      # Add services 
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    restart: always
    env_file:
      - .env
    volumes:
      - postgresdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=taah
      - POSTGRES_USER=waah
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}                  #from env  
    #- PGUSER=waah   # Remove PGUSER
    healthcheck:
      test: ["CMD-SHELL","psql -h localhost -U $${POSTGRES_USER} -c select 1 -d $${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - mynetwork

  spring_boot_server:
    image: backend
    build: .
    depends_on:
      - db
      # Remove condition: service_healthy
    ports:
      - "8080:8080"  
    networks:
      - mynetwork
    environment:
      - SERVER_PORT=8080
      
networks:
  mynetwork:
    driver: bridge
    
volumes:
  postgresdata:
  • 添加
    version
    version: '3.3'
  • 添加服务:
    services:
  • 删除 PGUSER
    #- PGUSER=waah
  • 更改端口:
    port 5432:5432
  • 删除
    condition: service_healthy
  • 改变:
    depends_on:
      - db
© www.soinside.com 2019 - 2024. All rights reserved.