繁体   English   中英

Spring 启动 Aerospike 和 Mongo Beans 冲突

[英]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);
    }
}

您不必定义mappingAerospikeConverteraerospikeClientaerospikeCacheManager 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM