[英]Spring boot Aerospike and Mongo Beans are Conflicting
在我的应用程序中,我同时使用 Mongo 和 Aerospike。 在创建 AerospikeConfig 时,我必须自动装配 MappingAerospikeConverter 并且在创建这个 bean 时,我遇到了与 bean 名称的内部冲突。
错误
应用程序无法启动
描述:
org.springframework.data.aerospike.convert.MappingAerospikeConverter 中构造函数的参数 1 需要单个 bean,但找到了 3 个: - org.springframework.data.aerospike.convert.CustomConversions:在 null 中定义 - customConversions:由方法 'customConversions 定义' 在 class 路径资源 [com/spring/rule/engine/config/RuleEngineConfig.class] - mongoCustomConversions:由 class 路径资源 [org/springframework/boot/autoconfigure/data/mongo/class] 中的方法 'mongoCustomConversions' 定义
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.aerospike.cache.AerospikeCacheManager;
import org.springframework.data.aerospike.convert.AerospikeTypeAliasAccessor;
import org.springframework.data.aerospike.convert.MappingAerospikeConverter;
import org.springframework.data.aerospike.mapping.AerospikeMappingContext;
import org.springframework.data.mapping.model.SimpleTypeHolder;
import com.aerospike.client.AerospikeClient;
@EnableAutoConfiguration
@Configuration
@Import(value = {MappingAerospikeConverter.class, AerospikeMappingContext.class, AerospikeTypeAliasAccessor.class,
SimpleTypeHolder.class})
public class AerospikeConfig {
@Value("${fs.aerospike.hostName}")
private String hostName;
@Value("${fs.aerospike.portNumber}")
private int port;
@Autowired
private MappingAerospikeConverter mappingAerospikeConverter;
@Bean
public AerospikeClient aerospike() {
return new AerospikeClient(hostName, port);
}
@Bean
public AerospikeCacheManager cacheManager(AerospikeClient aerospikeClient) {
return new AerospikeCacheManager(aerospikeClient, mappingAerospikeConverter);
}
}
您不必定义mappingAerospikeConverter
、 aerospikeClient
和aerospikeCacheManager
bean,只需如下所述扩展AbstractAerospikeDataConfiguration
(您可以在 Mongo 的配置类中做同样的事情)。
我确实设法在同一个项目中同时使用 Aerospike 和 Mongo。
我使用的版本:
气钉:
<dependency>
<groupId>com.aerospike</groupId>
<artifactId>spring-data-aerospike</artifactId>
<version>3.4.1</version>
</dependency>
蒙哥(最新):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置类:
气钉:
@Configuration
@EnableConfigurationProperties(AerospikeConfigurationProperties.class)
@EnableAerospikeRepositories(basePackageClasses = AerospikeUserRepository.class)
public class AerospikeConfiguration extends AbstractAerospikeDataConfiguration {
@Autowired
private AerospikeConfigurationProperties aerospikeConfigurationProperties;
@Override
protected Collection<Host> getHosts() {
return Collections.singleton(new Host(aerospikeConfigurationProperties.getHost(), aerospikeConfigurationProperties.getPort()));
}
@Override
protected String nameSpace() {
return aerospikeConfigurationProperties.getNamespace();
}
}
我使用了额外的配置属性 class 作为配置参数,然后我在 application.properties 文件中传递了值,但它不是强制性的:
@Data
@Component
@ConfigurationProperties(prefix = "aerospike")
public class AerospikeConfigurationProperties {
private String host;
private int port;
private String namespace;
}
蒙哥:
@Configuration
@EnableMongoRepositories(basePackageClasses = MongoUserRepository.class)
public class MongoConfiguration extends AbstractMongoClientConfiguration {
@Override
protected String getDatabaseName() {
return "test";
}
}
应用程序属性:
# aerospike
aerospike.host=localhost
aerospike.port=3000
aerospike.namespace=test
# mongo
spring.data.mongodb.username=root
spring.data.mongodb.password=example
spring.data.mongodb.database=test
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.