使用Cassandra
Cassandra是在生成应用程序时可以选择的受支持数据库之一。
这台发电机有一个限制:
它不支持OAuth2身份验证(我们需要为Spring Security的OAuth2服务器实现Cassandra后端)
当Cassandra被选中时:
Cassandra CQL驱动程序用于访问数据库。我们不使用Spring Data Cassandra,因为我们更喜欢直接使用驱动程序。因此,存储库包含大量代码
该实体副发电机不会问你的实体关系,因为你不能有一个NoSQL的数据库(至少在你有JPA关系的方式)的关系
生成的实体仅支持一个分区键,即ID。未来版本将提供复合主键和群集键
[BETA]迁移工具
与Liquibase类似,JHipster提供了一个应用CQL迁移脚本的工具,但有一些限制:
应用程序本身在启动时但在Docker容器内或手动运行时,该工具不会运行
所有CQL脚本都必须遵循该模式
{timestamp}_{description}.cql
并放在changelog目录中:src/main/resources/config/cql/changelog/
位于changelog目录中的所有尚未应用的脚本按字母顺序应用(即:遵循时间戳)
由于Cassandra不是事务性数据库,如果在将工具使用的表中的元数据插入之前发生错误,则存在使CQL迁移脚本多次运行的风险
有关该工具的一些信息:
生成实体后,其生成的CQL文件的生成
src/main/resources/config/cql/changelog/
方式与生成JPA的Liquibase更改日志的方式相同对于运行测试,
src/main/resources/config/cql/changelog/
目录中的所有CQL脚本都自动应用于内存中的集群这意味着除了将脚本放在changelog目录中以使其应用于测试之外,您无需做任何事情
该工具使用自己的cassandra表
schema_version
来存储元数据信息
该工具将按src/main/resources/config/cql/
以下顺序应用迁移脚本:
create-keyspace.cql
- 创建密钥空间和schema_version
表以存储迁移元数据所有
cql/changelog//*.cql
文件按字母顺序排列
运行该工具
根据您是否使用Docker,您可以使用多个选项来运行迁移工具。
使用Docker:
如果您使用生成的app.yml
或cassandra.yml
撰写文件启动了带有docker-compose的Cassandra集群,则该工具已经运行并且应用了所有cql脚本。
在changelog目录中添加CQL脚本后,您可以重新启动负责再次运行迁移服务的docker-service,而无需停止集群:docker-compose -f src/main/docker/cassandra.yml up <app>-cassandra-migration
手动:
根据一些先决条件,您可以手动运行该工具。熟悉该工具以便稍后将其包含在部署管道中可能会很有用。
先决条件:
通常在本地添加Cassandra联系点环境变量:
export CASSANDRA_CONTACT_POINT=`127.0.0.1`
使用您最喜欢的包管理器安装最近的(> 4)bash版本和md5sum
在类路径中有CQLSH
要运行该工具,请使用以下命令: src/main/docker/cassandra/scripts/autoMigrate.sh src/main/resources/config/cql/changelog/
默认情况下,src/main/resources/config/create-keyspace.cql
脚本用于在必要时创建键空间。您可以使用第二个参数覆盖它:src/main/docker/cassandra/scripts/autoMigrate.sh src/main/resources/config/cql/changelog/ create-keyspace-prod.cql
如果您只想针对群集执行特定脚本,请执行以下操作: src/main/docker/cassandra/scripts/execute-cql.sh src/main/resources/config/cql/changelog/<your script>.cql
非Linux操作系统上的Cassandra和Docker
在Mac OSx和Windows上,Docker容器不是直接托管,而是托管在VirtualBox VM上。
那些,你不能在localhost中访问它们但必须点击VirtualBox IP。
您可以使用此环境变量覆盖Cassandra联系点(默认情况下为localhost): export SPRING_DATA_CASSANDRA_CONTACTPOINTS=`docker-machine ip default`
Cassandra节点:
由于Cassandra节点也托管在虚拟机中,因此Cassandra Java驱动程序在从联系点接收到地址后尝试联系它们时会收到错误。
要解决此问题,您可以将路由规则添加到路由表(源)。
假设运行Cassandra节点的容器的IP地址为172.18.0.x:sudo route -n add 172.18.0.0/16 `docker-machine ip default`