“Spring.datasource.initialization-mode”的版本间的差异
Jihongchang(讨论 | 贡献) (建立内容为“1”的新页面) |
Jihongchang(讨论 | 贡献) |
||
| (未显示同一用户的6个中间版本) | |||
| 第1行: | 第1行: | ||
| − | + | spring.datasource.initialization-mode 默认值是 embedded | |
| + | |||
| + | === embedded === | ||
| + | 值为 embedded 的情况下,框架会根据连接类型判断当前连接的是不是嵌入式数据库(hsqldb、h2、derby),如果是嵌入式数据库的话, | ||
| + | |||
| + | 每次程序启动都会执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | 如果连接的数据库是 hsqldb、h2、derby 之外的其他数据库,则不会执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML | ||
| + | |||
| + | |||
| + | === always === | ||
| + | 值为 embedded 的情况下,不考虑数据库的类型,总是会在启动的时候执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | |||
| + | === never === | ||
| + | 值为 never 时,用不执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | |||
| + | |||
| + | === 有点特殊的 H2 === | ||
| + | h2 包含 <code>jdbc:h2:mem:testdb</code> (内存数据库)和 <code>jdbc:h2:file:E:/record/2023/2/16/db/file</code>(磁盘文件数据库); | ||
| + | |||
| + | 当使用内存数据库的时候总是会在启动的时候'''<big>执行</big>''' spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | 但当使用磁盘文件数据库的时候在启动的时候就'''<big>不执行</big>''' spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | === 另外 === | ||
| + | 如果用嵌入式数据库 h2,指定是存储到文件而不是内存的,并且想之后长期使用的,为了保留数据,可以在第一次运行程序时配置为<syntaxhighlight lang="properties"> | ||
| + | spring.datasource.initialization-mode=always | ||
| + | |||
| + | </syntaxhighlight>让程序执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML; | ||
| + | |||
| + | 之后停服务重启之前再把 spring.datasource.initialization-mode 这个属性删掉或者把值改成 never | ||
2023年2月16日 (四) 11:00的最新版本
spring.datasource.initialization-mode 默认值是 embedded
embedded
值为 embedded 的情况下,框架会根据连接类型判断当前连接的是不是嵌入式数据库(hsqldb、h2、derby),如果是嵌入式数据库的话,
每次程序启动都会执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
如果连接的数据库是 hsqldb、h2、derby 之外的其他数据库,则不会执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML
always
值为 embedded 的情况下,不考虑数据库的类型,总是会在启动的时候执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
never
值为 never 时,用不执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
有点特殊的 H2
h2 包含 jdbc:h2:mem:testdb (内存数据库)和 jdbc:h2:file:E:/record/2023/2/16/db/file(磁盘文件数据库);
当使用内存数据库的时候总是会在启动的时候执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
但当使用磁盘文件数据库的时候在启动的时候就不执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
另外
如果用嵌入式数据库 h2,指定是存储到文件而不是内存的,并且想之后长期使用的,为了保留数据,可以在第一次运行程序时配置为
spring.datasource.initialization-mode=always
让程序执行 spring.datasource.schema 里的 DDL 和 spring.datasource.data 里的 DML;
之后停服务重启之前再把 spring.datasource.initialization-mode 这个属性删掉或者把值改成 never