From 2075f80328a87cc79882477816e4f16d751f8f1c Mon Sep 17 00:00:00 2001 From: Stoyan Tzenkov Date: Sun, 6 Jan 2019 12:53:42 +0200 Subject: [PATCH] NY-YYYY: second_keyspace_using_springdata Signed-off-by: Stoyan Tzenkov --- .../CassandraAccessPointConfig.java | 132 ++++++++++++++---- .../configuration/CassandraAccountConfig.java | 83 ++++++----- .../configuration/CassandraBaseConfig.java | 23 ++- 3 files changed, 176 insertions(+), 62 deletions(-) diff --git a/src/main/java/biz/nynja/account/configuration/CassandraAccessPointConfig.java b/src/main/java/biz/nynja/account/configuration/CassandraAccessPointConfig.java index 1c67b4d..0421f54 100644 --- a/src/main/java/biz/nynja/account/configuration/CassandraAccessPointConfig.java +++ b/src/main/java/biz/nynja/account/configuration/CassandraAccessPointConfig.java @@ -1,26 +1,106 @@ -//package biz.nynja.account.configuration; -// -//import org.springframework.beans.factory.annotation.Value; -//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; -//import org.springframework.context.annotation.Configuration; -//import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; -// -//@Configuration -//@EnableCassandraRepositories(basePackages = { "biz.nynja.account.accesspoints" }) -//@ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringRunner") -//public class CassandraAccessPointConfig extends CassandraBaseConfig { -// -// @Value("${spring.data.cassandra.accesspoint.keyspace-name}") -// private String keyspaceName; -// -// @Override -// protected String getKeyspaceName() { -// return keyspaceName; -// } -// -// @Override -// public String[] getEntityBasePackages() { -// return new String[] { "biz.nynja.account.accesspoints" }; -// } -// -//} +package biz.nynja.account.configuration; + +import java.util.Arrays; +import java.util.List; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.cassandra.config.CassandraClusterFactoryBean; +import org.springframework.data.cassandra.config.CassandraSessionFactoryBean; +import org.springframework.data.cassandra.core.CassandraAdminOperations; +import org.springframework.data.cassandra.core.CassandraAdminTemplate; +import org.springframework.data.cassandra.core.convert.MappingCassandraConverter; +import org.springframework.data.cassandra.core.cql.keyspace.CreateKeyspaceSpecification; +import org.springframework.data.cassandra.core.mapping.CassandraMappingContext; +import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; +import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; + +@Configuration +@ConfigurationProperties("spring.data.cassandra.accesspoint") +@EnableCassandraRepositories( + basePackages = { "biz.nynja.account.accesspoints" }, + cassandraTemplateRef = "CassandraAccessPointTemplate") +@ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringRunner") +public class CassandraAccessPointConfig extends CassandraBaseConfig { + + @Value("${spring.data.cassandra.accesspoint.keyspace-name}") + protected String keyspaceName; + + @Override + protected String getKeyspaceName() { + return keyspaceName; + } + + public void setKeyspaceName(String keyspaceName) { + this.keyspaceName = keyspaceName; + } + + @Override + public String[] getEntityBasePackages() { + return new String[] { "biz.nynja.account.accesspoints" }; + } + + @Bean + public CassandraMappingContext mappingContext() { + CassandraMappingContext mappingContext = new CassandraMappingContext(); +// mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), "AuthenticationProvider")); + mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), getKeyspaceName())); + return mappingContext; + } + + @Bean + public MappingCassandraConverter cassandraConverter() { + return new MappingCassandraConverter(mappingContext()); + } + + + @Override +// @Primary + @Bean(name = "CassandraAccessPointTemplate") + public CassandraAdminOperations cassandraTemplate( + @Qualifier("accessPointSession") final CassandraSessionFactoryBean session) throws Exception { + return new CassandraAdminTemplate(session().getObject(), cassandraConverter()); + } + + @Override + @Bean(name = "accessPointSession") + public CassandraSessionFactoryBean session() { + + CassandraSessionFactoryBean session = new CassandraSessionFactoryBean(); + + session.setCluster(cluster().getObject()); + session.setConverter(cassandraConverter()); + session.setKeyspaceName(getKeyspaceName()); + session.setSchemaAction(getSchemaAction()); + session.setStartupScripts(getStartupScripts()); + session.setShutdownScripts(getShutdownScripts()); + + return session; + } + + @Override + protected List getKeyspaceCreations() { + CreateKeyspaceSpecification specification = CreateKeyspaceSpecification.createKeyspace(getKeyspaceName()) + .ifNotExists().withSimpleReplication(); + return Arrays.asList(specification); + } + + @Bean + public CassandraClusterFactoryBean cluster() { + CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); + cluster.setContactPoints(getContactPoints()); + cluster.setPort(getPort()); + cluster.setKeyspaceCreations(getKeyspaceCreations()); + + return cluster; + } + + //// Session, CassandraMappingContext, MappingCassandraConverter, CassandraOperations and repositories + + +} \ No newline at end of file diff --git a/src/main/java/biz/nynja/account/configuration/CassandraAccountConfig.java b/src/main/java/biz/nynja/account/configuration/CassandraAccountConfig.java index 547b535..2f151c1 100644 --- a/src/main/java/biz/nynja/account/configuration/CassandraAccountConfig.java +++ b/src/main/java/biz/nynja/account/configuration/CassandraAccountConfig.java @@ -1,27 +1,34 @@ package biz.nynja.account.configuration; - import java.util.Arrays; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.data.cassandra.config.CassandraClusterFactoryBean; import org.springframework.data.cassandra.config.CassandraSessionFactoryBean; -import org.springframework.data.cassandra.config.SchemaAction; import org.springframework.data.cassandra.core.CassandraAdminOperations; import org.springframework.data.cassandra.core.CassandraAdminTemplate; +import org.springframework.data.cassandra.core.CassandraOperations; +import org.springframework.data.cassandra.core.CassandraTemplate; +import org.springframework.data.cassandra.core.convert.CassandraConverter; +import org.springframework.data.cassandra.core.convert.MappingCassandraConverter; import org.springframework.data.cassandra.core.cql.keyspace.CreateKeyspaceSpecification; +import org.springframework.data.cassandra.core.mapping.CassandraMappingContext; +import org.springframework.data.cassandra.core.mapping.SimpleUserTypeResolver; import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; -import biz.nynja.account.StartupScriptsListener; +import com.datastax.driver.core.Session; @Configuration -@EnableCassandraRepositories( - basePackages = { "biz.nynja.account.models", "biz.nynja.account.repositories" }, +@ConfigurationProperties("spring.data.cassandra.account") +@EnableCassandraRepositories(basePackages = { "biz.nynja.account.models", "biz.nynja.account.repositories" }, cassandraTemplateRef = "CassandraAccountTemplate") @ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringRunner") public class CassandraAccountConfig extends CassandraBaseConfig { @@ -34,44 +41,38 @@ public class CassandraAccountConfig extends CassandraBaseConfig { return keyspaceName; } + public void setKeyspaceName(String keyspaceName) { + this.keyspaceName = keyspaceName; + } + @Override public String[] getEntityBasePackages() { return new String[] { "biz.nynja.account.models", "biz.nynja.account.repositories" }; } - @Override - public SchemaAction getSchemaAction() { - return SchemaAction.CREATE_IF_NOT_EXISTS; - } + @Bean + public CassandraClusterFactoryBean cluster() { + CassandraClusterFactoryBean cluster = new CassandraClusterFactoryBean(); + cluster.setContactPoints(getContactPoints()); + cluster.setPort(getPort()); + cluster.setKeyspaceCreations(getKeyspaceCreations()); - /** - * See {@link StartupScriptsListener} for scripts - * that require JPA annotated tables - */ - @Override - protected List getStartupScripts() { - return super.getStartupScripts(); + return cluster; } - public String getConfiguredKeyspaceName() { - return getKeyspaceName(); - } +// @Bean +// public CassandraMappingContext mappingContext() { +// CassandraMappingContext mappingContext = new CassandraMappingContext(); +// mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), "AuthenticationProvider")); +//// mappingContext.setUserTypeResolver(new SimpleUserTypeResolver(cluster().getObject(), getKeyspaceName())); +// return mappingContext; +// } +// +// @Bean +// public CassandraConverter cassandraConverter() { +// return new MappingCassandraConverter(mappingContext()); +// } - @Override - protected List getKeyspaceCreations() { - CreateKeyspaceSpecification specification = CreateKeyspaceSpecification.createKeyspace(getKeyspaceName()) - .ifNotExists().withSimpleReplication(); - return Arrays.asList(specification); - } - - @Override -// @Primary - @Bean(name = "CassandraAccountTemplate") - public CassandraAdminOperations cassandraTemplate( - @Qualifier("accountSession") final CassandraSessionFactoryBean session) throws Exception { - return new CassandraAdminTemplate(session().getObject(), cassandraConverter()); - } - @Override @Bean(name = "accountSession") public CassandraSessionFactoryBean session() { @@ -87,4 +88,16 @@ public class CassandraAccountConfig extends CassandraBaseConfig { return session; } -} + + @Override + @Primary + @Bean(name = "CassandraAccountTemplate") + public CassandraAdminOperations cassandraTemplate( + @Qualifier("accountSession") final CassandraSessionFactoryBean session) throws Exception { + return new CassandraAdminTemplate(session().getObject(), cassandraConverter()); + } + + + //// Session, CassandraMappingContext, MappingCassandraConverter, CassandraOperations and repositories + +} \ No newline at end of file diff --git a/src/main/java/biz/nynja/account/configuration/CassandraBaseConfig.java b/src/main/java/biz/nynja/account/configuration/CassandraBaseConfig.java index 98dcffb..3d395c6 100644 --- a/src/main/java/biz/nynja/account/configuration/CassandraBaseConfig.java +++ b/src/main/java/biz/nynja/account/configuration/CassandraBaseConfig.java @@ -16,7 +16,7 @@ import org.springframework.data.cassandra.core.cql.keyspace.CreateKeyspaceSpecif import org.springframework.data.cassandra.repository.config.EnableCassandraRepositories; @Configuration -@EnableCassandraRepositories(basePackages = { "biz.nynja.account.accesspoints" }) // to be moved to CassandraAccessPointConfig +@EnableCassandraRepositories( basePackages = { "biz.nynja.account.accesspoints" } ) @ConditionalOnMissingClass("org.springframework.test.context.junit4.SpringRunner") public abstract class CassandraBaseConfig extends AbstractCassandraConfiguration { @@ -44,8 +44,29 @@ public abstract class CassandraBaseConfig extends AbstractCassandraConfiguration return port; } + @Override + public SchemaAction getSchemaAction() { + return SchemaAction.CREATE_IF_NOT_EXISTS; + } + + @Override + protected List getStartupScripts() { + return super.getStartupScripts(); + } + + public String getConfiguredKeyspaceName() { + return getKeyspaceName(); + } + public CassandraAdminOperations cassandraTemplate(CassandraSessionFactoryBean session) throws Exception { return null; } + @Override + protected List getKeyspaceCreations() { + CreateKeyspaceSpecification specification = CreateKeyspaceSpecification.createKeyspace(getKeyspaceName()) + .ifNotExists().withSimpleReplication(); + return Arrays.asList(specification); + } + } -- GitLab