我有一个 Spring 框架 Web 应用程序,我正在尝试使用 Tomcat 和 docker 映像将其部署到生产环境中。
我搜索了这个错误,发现有两个可能的错误。第一个是数据库 url 格式不正确,我检查了我的,它是正确的。数据库网址是这样的
jdbc:postgresql://localhost:5432/postgres?currentSchema=volga&stringtype=unspecified
第二个可能的问题是Postgres db库文件未包含在war文件中。因此,我在正在运行的 tomcat 容器内运行 bash 命令,并检查 oracle 库文件是否存在于 war 文件中。我还尝试将 Postgres 库复制到 tomcat lib 文件夹中,但它不起作用。
我使用最少的代码创建了一个存储库来重现错误。 https://github.com/ap30422/spring-boot.git
请克隆存储库并将目录更改为
compete
目录。
运行 mvn clean install package
来构建应用程序。
然后运行 Docker build .
来构建图像。
使用 docker run #insert_image_id. -p 8080:8080
运行 Docker 镜像
如果您检查http://localhost:8080,您将在docker容器日志中看到
Down
文本和错误日志。
您当前遇到的问题可能是由于 Spring Boot 应用程序或 Tomcat Docker 映像中缺少 JDBC 驱动程序或配置错误造成的。您可以按照以下几个步骤来解决并可能解决该问题:
1。验证依赖管理。
确认 PostgreSQL JDBC 驱动程序作为依赖项包含在您的 pom.xml 文件中。如果尚不存在,请添加以下行
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>your_postgresql_version</version>
</dependency>
2。检查 Spring Boot 中的类路径。
虽然 Spring Boot 应自动将 JDBC 驱动程序加载到类路径中,但您可以在 application.properties 或 application.yml 文件中显式指定驱动程序类
spring.datasource.driver-class-name=org.postgresql.Driver
3.验证数据库连接 URL
确保数据库连接URL正确。如果数据库位于不同的服务器上,请使用适当的主机名或 IP 地址。另外,确认 Tomcat 可以解析“localhost”(如果它是 URL 的一部分)。
4。 Docker 镜像构建
创建 Docker 映像时,请确保将 PostgreSQL JDBC 驱动程序复制到映像中的正确位置。例如,您可以将其复制到“lib”文件夹。按如下方式修改您的 Dockerfile:
FROM tomcat:latest
COPY target/spring-boot.war /usr/local/tomcat/webapps/
COPY target/dependency/*.jar /usr/local/tomcat/lib/
通过执行这些步骤,您应该能够解决与 Spring Boot 应用程序和 Tomcat Docker 映像中的 JDBC 驱动程序和配置相关的潜在问题。