activiti 的 databaseSchemaUpdate true和create-drop的区别
在 Activiti 中,databaseSchemaUpdate
属性用于指定在启动时如何处理数据库模式。它有两种主要选项:true
和 create-drop
。
databaseSchemaUpdate=true
- 含义:如果数据库模式不存在,则创建它。如果数据库模式存在,则更新它以匹配 Activiti 的最新版本。
- 优点:确保数据库模式始终是最新的,这对于在升级 Activiti 或进行数据库更改时非常有用。
- 缺点:在生产环境中可能不适合,因为每次启动应用程序时都会更新数据库模式,这可能会导致数据丢失或应用程序中断。
databaseSchemaUpdate=create-drop
- 含义:在启动时删除现有的数据库模式(如果存在),然后创建新的数据库模式。
- 优点:确保数据库模式始终与 Activiti 的最新版本匹配,并且不会保留旧数据。
- 缺点:每次启动应用程序时都会丢失所有数据,因此不适合生产环境或需要持久化数据的应用程序。
选择哪一个?
选择 databaseSchemaUpdate
的正确值取决于你的具体需求:
- 开发和测试环境:
true
通常是开发和测试环境的最佳选择,因为它允许你轻松地更新数据库模式而不丢失数据。 - 生产环境:
create-drop
通常是生产环境的最佳选择,因为它确保数据库模式始终是最新的,并且不会保留旧数据。但是,你应该定期备份你的数据,以防万一出现问题。
其他注意事项
- 如果你的应用程序需要持久化数据,则不应使用
create-drop
,因为每次启动应用程序时都会丢失数据。 - 如果你的应用程序使用的是嵌入式数据库(例如 H2),则
databaseSchemaUpdate
的行为可能有所不同。请查阅嵌入式数据库的文档以获取更多详细信息。
我希望这能帮助你理解 databaseSchemaUpdate
属性的不同选项以及如何选择最适合你需求的选项。
idea远程debug
远程debug部署在docker容器里的服务,可在Dockerfile里增加下面代码:
ENTRYPOINT [“java”,“-jar”,“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=端口号”,“服务jar包名.jar”]
java中一种密码加密包方式
BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
System.out.println(encoder.encode(“123456”));
数据库初始化-jpa配置方式
spring.datasource.initialization-mode 同样需要将配置设置为 always
使用jpa的配置方式,将ddl-auto设置为create或者create-drop时,会自动搜索@entity实体对象,并创建为对应的表
spring.jpa.hibernate.ddl-auto: update,此时在资源目录下,新建 data.sql
若spring.jpa.hibernate.ddl-auto: create,则再资源目录下,新建import.sql文件,来实现数据初始化
本文中需要重点关注的几个配置:
- spring.datasource.initialization-mode: always 同样需要设置为always
- spring.jpa.generate-ddl: true 会根据@entity注解的实体类生成对应数据表
- spring.jpa.hibernate.ddl-auto: create/create-drop 这两个取值时,再创建表之后执行import.sql文件导入测试数据;若取值为update,则会执行data.sql
spring.jpa.hibernate.ddl-auto
spring.jpa.hibernate.ddl-auto
属性用于配置 Hibernate 如何在启动时管理数据库架构。它接受以下值:
- **create:**在启动时创建数据库架构,如果它不存在。
- **create-drop:**在启动时创建数据库架构,并在关闭时删除它。
- **update:**在启动时更新数据库架构,使其与实体类匹配。
- **validate:**验证数据库架构,使其与实体类匹配。如果架构不匹配,则抛出异常。
- **none:**不执行任何操作。
以下是一些示例:
- **create:**此设置适用于在开发或测试环境中创建新数据库。
- **update:**此设置适用于在生产环境中更新现有数据库。
- **validate:**此设置适用于验证数据库架构是否与实体类匹配。
- **none:**此设置适用于不希望 Hibernate 管理数据库架构的情况。
默认值:
默认情况下,spring.jpa.hibernate.ddl-auto
设置为 none。这意味着 Hibernate 不会在启动时自动创建或更新数据库架构。
建议:
在生产环境中,建议将 spring.jpa.hibernate.ddl-auto
设置为 update。这将确保数据库架构与实体类保持同步。在开发或测试环境中,可以使用 create 或 create-drop 设置来创建和删除数据库架构。
**注意:**如果使用 create
或 create-drop
设置,则在关闭应用程序时将删除数据库架构。因此,在使用这些设置时务必小心。
spring.datasource.schema 与 spring.datasource.data
在 Spring Boot 中,spring.datasource.schema
和 spring.datasource.data
属性用于配置如何初始化数据源。
- **schema:**指定用于创建数据库架构的脚本。这些脚本通常用于创建表、索引和其他数据库对象。
- **data:**指定用于填充数据库数据的脚本。这些脚本通常用于插入测试数据或初始数据。
schema 和 data 之间的主要区别在于它们在初始化过程中的执行顺序。
- Spring Boot 首先执行
schema
脚本。 - 然后,Spring Boot 执行
data
脚本。
此顺序很重要,因为 schema
脚本用于创建数据库结构,而 data
脚本用于填充数据。如果颠倒了顺序,则 data
脚本可能会失败,因为它们将尝试插入数据到不存在的表中。
以下是一些使用 schema 和 data 脚本的示例:
schema.sql:
1 | CREATE TABLE users ( |
data.sql:
1 | INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com'); |
这些脚本将创建一个名为 users
的表,并插入两行数据。
**请注意:**您还可以使用 spring.datasource.schema-locations
和 spring.datasource.data-locations
属性来指定脚本的位置。这些属性接受指向脚本文件或目录的路径。