尝试连接到Docker Postgres DB时没有合适的JDBC驱动程序



我正在使用Java服务器和Postgres DB处理待办事项列表,特别是尝试使用Docker Compose设置本地开发环境。该服务器以前已部署到Heroku,数据库连接工作正常。当我试图在Docker中建立服务器和DB之间的连接时,我得到了一个suitable driver not found error

Java数据库连接代码:

public void connectToDatabase() {
try {
String url = System.getenv("JDBC_DATABASE_URL");
conn = DriverManager.getConnection(url);
System.out.println("Database Connection Successful");
} catch (Exception e) {
e.printStackTrace();
}
}

Java服务器Dockerfile:

FROM gradle:7.4-jdk17-alpine
ADD --chown=gradle . /code
WORKDIR /code
EXPOSE 5000
CMD ["gradle", "--stacktrace", "run"]

图像构建没有问题。然而,当从docker compose up开始时,我得到以下错误:java.sql.SQLException: No suitable driver found for "jdbc:postgresql://tasks-db:5432/test-tasks-db?user=postgres&password=postgres"

服务器仍然在运行,只是没有DB连接——我可以访问其他端点/功能。

Docker Compose:

version: "3.9"
services:
java-service:
build: 
context: ./EchoServer/
dockerfile: Dockerfile
ports:
- "5000:5000"
environment:
- PORT=5000
- JDBC_DATABASE_URL="jdbc:postgresql://tasks-db:5432/test-tasks-db?user=postgres&password=postgres"
tasks-db:
image: postgres
restart: always
ports:
- "1235:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes: 
- tasks-db:/var/lib/postgresql/data
volumes:
tasks-db:
driver: local
logvolume01: {}

感谢大家的帮助,已经在这个晚上的大部分时间被屏蔽了。

编辑:build.gradle依赖项:

dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
implementation 'org.json:json:20210307'
implementation 'org.postgresql:postgresql:42.3.1'
}

因此,经过大量的尝试和错误,docker compose yml出现了问题,特别是DB的环境变量。

坏:JDBC_DATABASE_URL="jdbc:postgresql://tasks-db:5432/test-tasks-db?user=postgres&password=postgres"

这为DriverManager提供了一个用引号括起来的url。你不想要这个。

良好:JDBC_DATABASE_URL=jdbc:postgresql://tasks-db:5432/test-tasks-db?user=postgres&password=postgres

docker-compose.yml中缺少引号会带来一个快乐的DriverManager。

您没有展示如何构建Java应用程序,但缺少对postgres JDBC驱动程序的依赖。它不是Java附带的,但必须在类路径中提供给Java应用程序。使用maven,您可以添加此依赖项:https://mvnrepository.com/artifact/org.postgresql/postgresql/42.3.3

最新更新