当前位置: 首页 > 知识库问答 >
问题:

如何将Testcontainers Cassandra与Spring数据一起用于Apache Cassandra?

关正雅
2023-03-14

我为我的spring boot应用程序开发集成测试,该应用程序与Cassandra一起工作。我使用CassandRatemplate与Cassandra通信。

spring.data.cassandra.contact-points=cassandra-host
spring.data.cassandra.port=9042
@ActiveProfiles("test")
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@SpringBootTest(classes = {ExampleApplication.class})
@ContextConfiguration(initializers = CounterIntegrationTestContainers.Initializer.class)
@EnableConfigurationProperties
public class CounterIntegrationTestContainers extends CounterIntegrationTest {
    @ClassRule
    public static GenericContainer cassandra =
            new GenericContainer("cassandra:3")
                    .withExposedPorts(9042);

    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
            EnvironmentTestUtils.addEnvironment(
                "testcontainers",
                configurableApplicationContext.getEnvironment(),
                "cassandra.host=" + cassandra.getContainerIpAddress(),
                "cassandra.port=" + cassandra.getMappedPort(9042)
            );
        }
    }
}
public class BaeldungPostgresqlContainer extends PostgreSQLContainer<BaeldungPostgresqlContainer> {
    private static final String IMAGE_VERSION = "postgres:11.1";
    private static BaeldungPostgresqlContainer container;
 
    private BaeldungPostgresqlContainer() {
        super(IMAGE_VERSION);
    }
 
    public static BaeldungPostgresqlContainer getInstance() {
        if (container == null) {
            container = new BaeldungPostgresqlContainer();
        }
        return container;
    }
 
    @Override
    public void start() {
        super.start();
        System.setProperty("DB_URL", container.getJdbcUrl());
        System.setProperty("DB_USERNAME", container.getUsername());
        System.setProperty("DB_PASSWORD", container.getPassword());
    }
 
    @Override
    public void stop() {
        //do nothing, JVM handles shut down
    }
}

有什么方法可以将Testcontainers Cassandra与Spring数据一起用于Apache Cassandra吗?

共有1个答案

蒯宏达
2023-03-14

看来,我可以用这样的类运行测试:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(
        initializers = CassandraTestPrjApplicationTests.Initializer.class
)
public class CassandraTestPrjApplicationTests {

    @Test
    public void contextLoads() {
    }

    public static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
        @Override
        public void initialize(ConfigurableApplicationContext applicationContext) {
            GenericContainer<?> cassandra =
                    new GenericContainer<>("cassandra:3").withExposedPorts(9042);

            cassandra.start();

            TestPropertyValues.of(
                    "spring.data.cassandra.contact-points=" + cassandra.getContainerIpAddress(),
                    "spring.data.cassandra.port=" + cassandra.getMappedPort(9042)
            ).applyTo(applicationContext);
        }
    }
}

这是我的成绩。构建:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-cassandra'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'

    testCompile "org.testcontainers:testcontainers:1.12.0"
    testCompile "org.testcontainers:cassandra:1.12.0"
}
 类似资料:
  • 问题内容: 我正在使用Spring,Spring Data JPA,Spring Security,Primefaces的项目中工作… 在本教程中,你只能在预定义的数据源之间实现动态数据源切换。 这是我的代码的片段: springContext-jpa.xml 我想做的就是使targetDataSources映射也与其元素一样动态。 换句话说,我想获取某个数据库表,使用存储在该表中的属性创建我的数

  • 我在一个使用Spring、Spring数据JPA、Spring Security、Primefaces的项目中工作。。。 我正在学习关于spring动态数据源路由的教程。 在本教程中,您只能在预定义的数据源之间实现动态数据源切换。 以下是我的代码片段: springContext jpa。xml 我想做的是使targetDataSources映射与它的元素一样动态。 换句话说,我想获取一个特定的数

  • 问题内容: 我想用MySQL和JPA设置Spring Boot。为此,我创建: Person PersonRepository PersonController 开始课程示例: 对于数据库配置,我创建了application.properties 所以我有项目结构: 但是结果是我有例外: 问题答案: 我像你一样创建了一个项目。结构看起来像这样 这些类只是复制自你的类。 我将application.

  • 我想ssh到代理后面的机器,然后在我的java程序中进行portforwarding。(为了能够ssh到盒子,我应该先ssh到代理机器)。我通常通过在我的~/.ssh/config文件中添加以下条目来实现: 谢了!

  • 参考项目:在Apache Beam中观察与文件夹匹配的新文件 您可以将其用于简单的用例吗?我的用例是我让用户将数据上传到Cloud Storage- 我想做的是保持管道在流式模式下运行,一旦文件上传到Cloud Storage,它就会通过管道进行处理。watchfornewfile可以做到这一点吗? 我编写的代码如下: 没有任何内容被转发到Big Query,但管道显示它正在流式传输。

  • 我使用Firefox内置的U2F API和Chrome的JavaScript U2F API实现了基于U2F的桌面浏览器。我遵循了这里的基本配方: https://github.com/castle/ruby-u2f 对于每个物理设备,我有4个属性: 证书 key_handle public_key 计数器 我相信(但我不确定),在获取了关于这个物理设备的这些信息之后,我现在可以在移动设备上呈现完