Java开发随笔

activiti 的 databaseSchemaUpdate true和create-drop的区别

在 Activiti 中,databaseSchemaUpdate 属性用于指定在启动时如何处理数据库模式。它有两种主要选项:truecreate-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。这将确保数据库架构与实体类保持同步。在开发或测试环境中,可以使用 createcreate-drop 设置来创建和删除数据库架构。

**注意:**如果使用 createcreate-drop 设置,则在关闭应用程序时将删除数据库架构。因此,在使用这些设置时务必小心。

spring.datasource.schema 与 spring.datasource.data

在 Spring Boot 中,spring.datasource.schemaspring.datasource.data 属性用于配置如何初始化数据源。

  • **schema:**指定用于创建数据库架构的脚本。这些脚本通常用于创建表、索引和其他数据库对象。
  • **data:**指定用于填充数据库数据的脚本。这些脚本通常用于插入测试数据或初始数据。

schema 和 data 之间的主要区别在于它们在初始化过程中的执行顺序。

  1. Spring Boot 首先执行 schema 脚本。
  2. 然后,Spring Boot 执行 data 脚本。

此顺序很重要,因为 schema 脚本用于创建数据库结构,而 data 脚本用于填充数据。如果颠倒了顺序,则 data 脚本可能会失败,因为它们将尝试插入数据到不存在的表中。

以下是一些使用 schema 和 data 脚本的示例:

schema.sql:

1
2
3
4
5
6
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

data.sql:

1
2
INSERT INTO users (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane.doe@example.com');

这些脚本将创建一个名为 users 的表,并插入两行数据。

**请注意:**您还可以使用 spring.datasource.schema-locationsspring.datasource.data-locations 属性来指定脚本的位置。这些属性接受指向脚本文件或目录的路径。

-------------本文结束感谢您的阅读-------------