介绍
????Spring数据Neo4j 6.x(您使用导入 spring-boot-starter-parent:2.4.x 的那个)消除了直接从域模型创建约束的可能性.
现在,这意味着您必须使用 Neo4j 的 Cypher 查询语言并执行您想要执行的操作(例如:CREATE CONSTRAINT notnull_name IF NOT EXISTS ON (role:Role) ASSERT EXISTS (role.name)
).
显然,这很难管理,因为您必须在应用程序启动之前执行脚本。而且对于生产环境来说是有困难的。
????So 版画已经创建:它是一个为我们执行脚本的工具。
该机制如下,我报告这一点issue在 Github 上,它很好地解释了一切。
Solution
???? Pom.xml 依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-jdbc-driver</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>org.liquigraph</groupId>
<artifactId>liquigraph-spring-boot-starter</artifactId>
<version>4.0.2</version>
</dependency>
???? 变更日志.xml 文件(位于此处 -> {project_dir}/src/main/resources/db/liquigraph/changelog.xml):
<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns="http://www.liquigraph.org/schema/1.0/liquigraph.xsd">
<changeset id="constraints" author="you">
<query>CREATE CONSTRAINT notnull_name IF NOT EXISTS ON (role:Role) ASSERT EXISTS (role.name)</query>
</changeset>
</changelog>
???? application.yml 属性:
spring:
neo4j:
uri: neo4j://localhost:7687 #neo4j+s if you use an HTTPS Neo4j instance
authentication:
username: neo4j
password: neo4j
datasource: #Liquigraph configuration used by Liquigraph POM dependency
url: jdbc:neo4j:neo4j://localhost?encryption=false #encryption=true if you use an HTTPS Neo4j instance
driver-class-name: org.neo4j.jdbc.boltrouting.BoltRoutingNeo4jDriver
username: neo4j
password: neo4j
✔️ ## 在启动时,将创建以下约束##
具体日志:
2021-01-12 18:33:18.917 INFO 2420 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2021-01-12 18:33:18.940 INFO 2420 --- [ main] Driver : Routing driver instance 706067443 created for server address localhost:7687
2021-01-12 18:33:21.510 INFO 2420 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-01-12 18:33:22.672 INFO 2420 --- [ main] o.l.core.io.ChangelogGraphWriter : Executing postcondition of changeset ID constraints by you
2021-01-12 18:33:22.775 INFO 2420 --- [ main] o.l.core.io.ChangelogGraphWriter : Changeset ID constraints by you was just executed
正如你所看到的,你的changelog.xml已经被应用了✔️。