最简单的做法是将Spring Boot Starter Data Cassandra 依赖项添加到您的Spring Boot 应用程序中,就像这样...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-cassandra</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
此外,这会将 Spring Data Cassandra dependency 添加到您的应用程序中。
使用Spring Data Cassandra,您可以通过调用setKeyspaceCreations(:Set) 方法使用CassandraClusterFactoryBean(或更准确地说,子类...CassandraCqlClusterFactoryBean)配置应用程序的键空间.
KeyspaceActionSpecification 类是不言自明的。您甚至可以使用KeyspaceActionSpecificationFactoryBean 创建一个,将其添加到Set,然后将其传递给CassandraClusterFactoryBean 上的setKeyspaceCreations(..) 方法。
为了生成应用程序的表,您基本上只需要使用 SD Cassandra @Table 注释来注释您的应用程序域对象(实体),并确保您的域对象/实体可以在应用程序的 CLASSPATH 中找到。
具体来说,您可以让您的应用程序 @Configuration 类扩展 SD Cassandra AbstractClusterConfiguration 类。在那里,您将找到 getEntityBasePackages():String[] 方法,您可以覆盖该方法以提供包含应用程序域对象/实体类的包位置,然后 SD Cassandra 将使用该方法到 scan 以获取 @Table 域对象/实体。
在正确识别您的应用程序@Table 域对象/实体后,您可以使用CassandraSessionFactoryBean 方法setSchemaAction(:SchemaAction) 将SD Cassandra SchemaAction 设置为CREATE。这将在您的 Keyspace 中为扫描期间找到的所有域对象/实体创建表,为您提供 identified 适当的 CassandraSessionFactoryBean 上的 Keyspace。
显然,如果您的应用程序创建/使用多个 Keyspace,您将需要为每个 Keyspace 创建单独的 CassandraSessionFactoryBean,并为属于特定 Keyspace 的实体适当设置 entityBasePackages 配置属性,以便在该 Keyspace 中创建关联的表。
现在...
对于每个用户的“附加”表,这有点复杂和棘手。
您也许可以在此处利用 Spring Profiles,但是,配置文件通常仅在启动时应用。如果其他用户登录到已经运行的应用程序,您需要一种方法在运行时向 Spring ApplicationContext 提供额外的 @Configuration 类。
您的Spring Boot 应用程序可以注入对AnnotationConfigApplicationContext 的引用,然后在登录事件中使用它以编程方式根据登录到的用户register 附加@Configuration 类应用。您需要使用ApplicationContext.refresh() 关注您的register(Class...) 电话。
您还需要适当处理 Tables 已经存在的情况。
SD Cassandra 目前不支持此功能,但请参阅 DATACASS-219 了解更多详情。
从技术上讲,在运行时为所有用户创建应用程序所需的所有可能的表并使用 Cassandra 的安全设置来按角色和分配的权限限制单个用户的访问会简单得多。
另一种选择可能只是在用户登录应用程序时根据需要创建临时键空间和/或表,在用户注销时删除它们。
显然,这里有很多不同的选择,它更多地归结为架构决策、权衡和考虑,然后是技术可行性,所以要小心。
希望这会有所帮助。
干杯!