Reputation: 1
I want to use Redis and Aerospike together, in the sense that I want to use Aerospike for Spring caching, but I want to use Redis as a memory that I only read a single value from(crud repository). I am getting an error in configuring Aerospike, the error is that when I am configuring the Aerospike cache management section, it is getting an error with the default value set for Redis in Spring.
this is my Aerospike config:
@Configuration
@EnableConfigurationProperties(AerospikeProperties.class)
@EnableAerospikeRepositories(basePackageClasses = {CacheableFileEntityRepository.class})
public class AerospikeConfig extends AbstractAerospikeDataConfiguration {
@Autowired
private AerospikeProperties aerospikeProperties;
@Override
protected Collection<Host> getHosts() {
return aerospikeProperties.getHosts() ;
}
@Override
protected String nameSpace() {
return aerospikeProperties.getNamespace();
}
}
and this is my Aerospike Properties:
@Log4j2
@Data
@Profile("aerospike")
@ConfigurationProperties(prefix = "aerospike")
@RequiredArgsConstructor(onConstructor_ ={@Autowired})
public class AerospikeProperties {
@Value("${spring.aerospike.host}")
private String host;
@Value("${spring.aerospike.port}")
private int port;
@Value("${spring.aerospike.namespace}")
private String namespace;
@Value("${spring.aerospike.policies.client.readTimeout}")
private int readTimeout;
@Value("${spring.aerospike.policies.client.writeTimeout}")
private int writeTimeout;
@Value("${spring.aerospike.policies.client.connectionTimeout}")
private int connectionTimeout;
@Value("${spring.aerospike.policies.client.maxSocketIdle}")
private int maxSocketIdle;
@Value("${spring.aerospike.policies.client.totalTimeout}")
private int totalTimeout;
@Bean(destroyMethod = "close")
public AerospikeClient aerospikeClient() {
try {
ClientPolicy clientPolicy = new ClientPolicy();
clientPolicy.readPolicyDefault.replica = Replica.MASTER;
clientPolicy.readPolicyDefault.readModeAP = ReadModeAP.ONE;
clientPolicy.writePolicyDefault.commitLevel = CommitLevel.COMMIT_ALL;
clientPolicy.readPolicyDefault.socketTimeout = readTimeout;
clientPolicy.readPolicyDefault.totalTimeout = totalTimeout;
clientPolicy.writePolicyDefault.socketTimeout = writeTimeout;
clientPolicy.writePolicyDefault.totalTimeout = totalTimeout;
clientPolicy.maxSocketIdle=maxSocketIdle;
clientPolicy.timeout=connectionTimeout;
return new AerospikeClient(clientPolicy, host, port);
} catch (RuntimeException e) {
return null;
}
}
protected Collection<Host> getHosts() {
return Collections.singleton(new Host(host, port));
}
protected String getNamespace() {
return namespace;
}
}
i want to add this code and have error:
@Bean
public AerospikeCacheManager cacheManager(AerospikeClient aerospikeClient) {
AerospikeCacheConfiguration defaultConfiguration = new AerospikeCacheConfiguration("tax_registration");
return new AerospikeCacheManager(aerospikeClient, mappingAerospikeConverter, defaultConfiguration);
}
this is the error:
Parameter 1 of constructor in org.springframework.data.aerospike.convert.MappingAerospikeConverter required a single bean, but 2 were found:
- org.springframework.data.aerospike.convert.AerospikeCustomConversions: defined in unknown location
- redisCustomConversions: defined in unknown location
i use this annotations but not worked
@Qualifier
@Primary
this is my spring boot and aerospike version :
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>spring-data-aerospike</artifactId>
<version>$4.8.0</version>
</dependency>
Upvotes: 0
Views: 68