jakarta ee Hibernate 未使用 Dockerized Tomcat 在 Postgres 中创建表

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

我是 java/jakartaEE 的新手,为了开始使用,我目前正在开发一个 Java EE REST 应用程序,使用 PostgreSQL 作为数据库,使用 Hibernate 作为 ORM。该应用程序使用 Docker 进行容器化,并为 Postgres 数据库和 Tomcat 服务器提供单独的服务。尽管我的应用程序已启动并且可以通过 Postman 访问,但 Hibernate 不会在数据库中创建任何表,并且没有任何日志表明尝试这样做。

这是我的 persistence.xml:

<persistence version="2.2"
         xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">

<persistence-unit name="todoAppPersistenceUnit" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <class>com.jchaaban.javaeerestapp.entity.User</class>
    <class>com.jchaaban.javaeerestapp.entity.Todo</class>

    <exclude-unlisted-classes>false</exclude-unlisted-classes>

    <properties>
        <property name="jakarta.persistence.schema-generation.database.action" value="create"/>
        <property name="jakarta.persistence.jdbc.url" value="jdbc:postgresql://db:5432/postgres"/>
        <property name="jakarta.persistence.jdbc.user" value="postgres"/>
        <property name="jakarta.persistence.jdbc.password" value="admin"/>
        <property name="jakarta.persistence.jdbc.driver" value="org.postgresql.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="true"/>
        <property name="hibernate.use_sql_comments" value="true"/>
    </properties>

</persistence-unit>

这是我的 docker-compose

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: postgres
    ports:
      - "5432:5432"
    volumes:
      - ./volumes/postgres/db/data:/var/lib/postgresql/data
    networks:
      - rest-app

  tomcat:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    depends_on:
      - db
    networks:
      - rest-app

还有我的 Tomcat 服务的 Dockerfile:

RUN rm -rf /usr/local/tomcat/webapps/ROOT
COPY target/restapp.war /usr/local/tomcat/webapps/ROOT.war
EXPOSE 8080
CMD ["catalina.sh", "run"]

我已检查 persistence.xml 文件是否位于类路径中的 META-INF 目录中。该数据库可以从 localhost 上的 intellij 访问,并且我在 persistence.xml 文件中使用了它的服务名称,因为两个容器位于 docker 中的同一网络中。 Hibernate的show_sql属性设置为true,但是没有SQL日志出现。

我在应用程序中添加了一条获取路线,以查看是否可以使用邮递员访问它,并且我可以毫无问题地访问它。

以下是我部署应用程序时在 tomcat 中收到的一些日志:

java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.817 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.820 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.7.0].
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.820 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.820 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.821 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1n  15 Mar 2022]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.964 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:07.977 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [269] milliseconds
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.003 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.003 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.65]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.010 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.208 WARNING [main] org.apache.tomcat.util.descriptor.web.WebXml.setVersion Unknown version string [5.0]. Default version will be used.
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.680 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.975 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [965] ms
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.978 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
java-ee-rest-app-tomcat-1  | 07-Nov-2023 03:01:08.983 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1006] milliseconds

我怀疑 Docker 化环境中的 Hibernate 实体扫描或配置可能存在问题,但我对此不确定。有人对如何解决这个问题有建议吗?

docker hibernate jpa tomcat jakarta-ee
1个回答
0
投票

看来您还需要更新

spring.jpa.hibernate.ddl-auto
属性。您可以根据您的用例使用值
create-drop
update

有关该房产的更多信息

spring.jpa.hibernate.ddl-auto

© www.soinside.com 2019 - 2024. All rights reserved.