首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不工作::spring.jpa.hibernate.ddl-auto=update

不工作::spring.jpa.hibernate.ddl-auto=update
EN

Stack Overflow用户
提问于 2022-08-11 07:41:37
回答 1查看 560关注 0票数 1

我正在尝试使用单个db创建多租户应用程序,并为租户分离模式。而且我也不想在每一家初创公司之后泄露我的数据。这是我的application.properties文件

代码语言:javascript
运行
复制
logging.level.root=info
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:multi-tenant

spring.jpa.hibernate.ddl-auto=update
spring.liquibase.change-log=classpath:db/changelog/changelog-master.xml

这是我的日志

代码语言:javascript
运行
复制
Connected to the target VM, address: '127.0.0.1:53999', transport: 'socket'

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.2)

2022-08-11 13:02:28.342  INFO 25732 --- [           main] c.l.multitenant.MultiTenantApplication   : Starting MultiTenantApplication using Java 18.0.1.1 on Manu with PID 25732 (D:\JAVA\multi-tenant - updated\target\classes started by itsma in D:\JAVA\multi-tenant - updated)
2022-08-11 13:02:28.342  INFO 25732 --- [           main] c.l.multitenant.MultiTenantApplication   : No active profile set, falling back to 1 default profile: "default"
2022-08-11 13:02:29.534  INFO 25732 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2022-08-11 13:02:29.613  INFO 25732 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 53 ms. Found 1 JPA repository interfaces.
2022-08-11 13:02:30.507  INFO 25732 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-08-11 13:02:30.522  INFO 25732 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-08-11 13:02:30.522  INFO 25732 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.65]
2022-08-11 13:02:30.742  INFO 25732 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-08-11 13:02:30.742  INFO 25732 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2321 ms
2022-08-11 13:02:30.993  INFO 25732 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-08-11 13:02:31.286  INFO 25732 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-08-11 13:02:31.302  INFO 25732 --- [           main] o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:multi-tenant'
2022-08-11 13:02:31.893  INFO 25732 --- [           main] liquibase.database                       : Set default schema name to PUBLIC
2022-08-11 13:02:32.253  INFO 25732 --- [           main] liquibase.lockservice                    : Successfully acquired change log lock
2022-08-11 13:02:32.929  INFO 25732 --- [           main] liquibase.changelog                      : Creating database history table with name: PUBLIC.DATABASECHANGELOG
2022-08-11 13:02:32.929  INFO 25732 --- [           main] liquibase.changelog                      : Reading from PUBLIC.DATABASECHANGELOG
Running Changeset: db/changelog/changelog-v1.0.xml::1::manu
2022-08-11 13:02:33.102  INFO 25732 --- [           main] liquibase.changelog                      : SQL in file db/changelog/data/data.sql executed
2022-08-11 13:02:33.102  INFO 25732 --- [           main] liquibase.changelog                      : ChangeSet db/changelog/changelog-v1.0.xml::1::manu ran successfully in 32ms
2022-08-11 13:02:33.117  INFO 25732 --- [           main] liquibase.lockservice                    : Successfully released change log lock
2022-08-11 13:02:33.321  INFO 25732 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
2022-08-11 13:02:33.384  INFO 25732 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.6.10.Final
2022-08-11 13:02:33.525  INFO 25732 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
2022-08-11 13:02:33.682  INFO 25732 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
2022-08-11 13:02:34.138  INFO 25732 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2022-08-11 13:02:34.138  INFO 25732 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2022-08-11 13:02:34.530  WARN 25732 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2022-08-11 13:02:35.064  INFO 25732 --- [           main] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2022-08-11 13:02:35.143  INFO 25732 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-08-11 13:02:35.174  INFO 25732 --- [           main] c.l.multitenant.MultiTenantApplication   : Started MultiTenantApplication in 7.407 seconds (JVM running for 8.296)
2022-08-11 13:02:37.086  INFO 25732 --- [nio-8080-exec-7] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2022-08-11 13:02:37.086  INFO 25732 --- [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2022-08-11 13:02:37.087  INFO 25732 --- [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

为什么ddl-auto=update不能工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-11 09:17:08

您使用内存中的数据库配置。

这意味着当应用程序启动时,嵌入式数据库将不是在永久内存中创建,而是在RAM中创建。

这也意味着当应用程序被关闭时,它在RAM中接收的内存将被清除,因此与此数据库相关的任何信息也会丢失。

H2数据库在url中提供了另一种配置,它将确保数据库保存的数据不是存储在内存中,而是存储在永久存储的硬盘中。这样,应用程序就可以关闭,数据库包含的数据也不会丢失。但是,当应用程序关闭时,数据库将停止工作,因为运行数据库的进程属于启动应用程序的主要进程。但是,当应用程序再次启动并且数据库进程也启动时,数据库将看到它在应用程序关闭之前包含的所有数据。

配置如下:

代码语言:javascript
运行
复制
spring.datasource.url= jdbc:h2:/data/multi-tenant;AUTO_SERVER=TRUE

多个进程可以访问同一个数据库,而不必手动启动服务器。为此,将;AUTO_SERVER=TRUE附加到数据库URL。您可以使用相同的数据库URL,而不依赖于数据库是否已打开。此特性不适用于内存中数据库。 对此数据库的所有连接使用相同的URL。在内部,当使用这种模式时,第一个到数据库的连接是在嵌入式模式下进行的,另外一个服务器是在内部启动的(作为守护进程线程)。如果数据库已在另一个进程中打开,则将自动使用服务器模式。服务器的IP地址和端口存储在文件.lock.db中,这就是不能支持内存中数据库的原因。 打开到数据库的第一个连接的应用程序使用嵌入式模式,这比服务器模式更快。因此,如果可能的话,主应用程序应该首先打开数据库。第一个连接在随机端口上自动启动服务器。这个服务器允许远程连接,但是只允许连接到这个数据库(为了确保客户机读取.lock.db文件并将存储在那里的随机密钥发送到服务器)。当第一个连接关闭时,服务器将停止。如果其他(远程)连接仍处于打开状态,则其中一个连接将启动服务器(自动重新连接将自动启用)。 所有进程都需要访问数据库文件。如果第一个连接已关闭(启动服务器的连接),则其他连接的打开事务将被回滚(如果不禁用自动提交,这可能不是问题)。不支持显式客户机/服务器连接(使用jdbc:h2:tcp://或ssl://)。内存中的数据库不支持此模式.

H2文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73317001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档