Ema*_*ger 6 java spring cassandra spring-boot cassandra-3.0
我想在Spring Boot项目中使用Cassandra 3.x. 我发现Spring Data Cassandra项目的当前发布版本仅支持Cassandra 2.x. 所以我想使用DataStax驱动程序而不是Spring Data Cassandra项目.我补充道
compile 'com.datastax.cassandra:cassandra-driver-core:3.1.1'
Run Code Online (Sandbox Code Playgroud)
作为依赖.现在我可以将值插入到Cassandra集群的键空间中.但是当运行REST控制器的测试时,我得到一个错误
java.lang.NoClassDefFoundError: io/netty/handler/codec/http/FullHttpRequest
Run Code Online (Sandbox Code Playgroud)
所以我补充道
compile 'io.netty:netty-all:4.1.6.Final'
Run Code Online (Sandbox Code Playgroud)
作为依赖,错误消失了.但现在所有测试都使用
TestRestTemplate.postForObject(...)
Run Code Online (Sandbox Code Playgroud)
要么
TestRestTemplate.put(...)
Run Code Online (Sandbox Code Playgroud)
失败.但是使用
TestRestTemplate.getForObject(...)
Run Code Online (Sandbox Code Playgroud)
按预期工作.我假设在Spring Boot的依赖项和我作为依赖项添加的Netty版本中存在一些冲突.
我发现最新版本的DataStax Cassandra驱动程序在没有额外的Netty依赖性的情况下工作是2.1.5,其日期为2015年3月,并且不支持Cassandra 3.使用此驱动程序一切正常但我不想使用那个老司机.
更新:我删除了DataStax驱动程序依赖项,并尝试使用Spring Data Cassandra的1.5.0.M1版本,并在buildscript中覆盖Spring,Spring Data Cassandra和Cassandra驱动程序版本.
ext['spring.version'] = '5.0.0.M2'
ext['spring-data-releasetrain.version'] = 'Ingalls-M1'
ext['cassandra-driver.version'] = '3.1.1'
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
java.lang.NoClassDefFoundError: io/netty/util/Timer
Run Code Online (Sandbox Code Playgroud)
使用Cassandra功能时.当我再次包含Netty时,Cassandra功能正常,但我的测试使用TestRestTemplate.put并且.post不再运行.我再次尝试升级到Spring Boot Version 2.0.0.BUILD-SNAPSHOT,其中还包括Spring Data Cassandra 1.5.0.M1.现在,当我启动应用程序并使用DataStax驱动程序功能时,我得到了与之前相同的NoClassDefFoundError.将Netty添加为依赖项会再次导致基于TestRestTemplate的单元测试...
更新:TestRestTemplate无法正常工作,因为Spring Boot将它配置为Netty4ClientHttpRequestFactory在类路径上找到Netty时使用,但Netty4ClientHttpRequestFactory似乎不起作用.
请参阅https://github.com/spring-projects/spring-boot/issues/7240 和https://jira.spring.io/browse/SPR-14860
有关修复,请参阅我对此问题的回答.
我坚持使用Spring Data Cassandra 1.5.0.M1和Cassandra驱动程序3.1.1使用以下版本覆盖:
ext['spring.version'] = '5.0.0.M2'
ext['spring-data-releasetrain.version'] = 'Ingalls-M1'
ext['cassandra-driver.version'] = '3.1.1'
Run Code Online (Sandbox Code Playgroud)
为了使Cassandra驱动程序功能正常工作,我不得不将Netty添加为依赖项.
compile 'io.netty:netty-all:4.1.6.Final'
Run Code Online (Sandbox Code Playgroud)
要做TestRestTemplate.postForObject(...),TestRestTemplate.put(...)我必须提供RestTemplateBuilder @Bean并配置它使用SimpleClientHttpRequestFactory.
@TestConfiguration
static class TestConfig {
@Bean
public RestTemplateBuilder restTemplateBuilder() {
return new RestTemplateBuilder().detectRequestFactory(false).requestFactory(SimpleClientHttpRequestFactory.class);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |