NB:Spring Boot 2.1.10 + Spring Cloud Greenwich.SR3
我有两个Spring Data JPA服务访问相同的外部数据库(即MySQL)并共享一个公共域:
@Entity
@Data
public class Person {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "first_name") @NotNull
private String firstname;
private LocalDate birth;
private Integer votes = 0;
}
在第一个服务(生产者)中,我添加了一个data.sql用于样本插入:
insert into person(first_name) values ('foobar');
insert into person(first_name) values ('scoubidou');
以及以下属性:
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.initialization-mode=always
在第二个服务(消费者)中,我只想使用架构而不在启动时对其进行修改,因此我使用了以下属性:
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.initialization-mode=never
启动生产者时,将创建数据库模式并用示例实体填充。 但是,当我启动使用者时,实体表将被截断。 请问有人知道桌子如何排空以及如何避免吗?
答案 0 :(得分:0)
请勿在生产者服务上使用create-drop
。阅读this
无:MySQL的默认设置。数据库结构没有任何变化。
更新:Hibernate根据给定的实体结构更改数据库。
- create:每次创建数据库,但不会在关闭时将其删除。
- create-drop:创建数据库并在SessionFactory关闭时将其删除。
尝试仅使用create
spring.jpa.hibernate.ddl-auto=create
答案 1 :(得分:0)
此属性最终解决了问题:
spring.jpa.properties.hibernate.hbm2ddl.auto=validate
也许spring.jpa.hibernate.ddl-auto的连接有误导作用?