Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 使用Spring Boot在MongoTemplate中注册CustomConverter_Spring Boot_Spring Data Mongodb - Fatal编程技术网

Spring boot 使用Spring Boot在MongoTemplate中注册CustomConverter

Spring boot 使用Spring Boot在MongoTemplate中注册CustomConverter,spring-boot,spring-data-mongodb,Spring Boot,Spring Data Mongodb,如何使用Spring Boot在MongoTemplate中注册自定义转换器?如果可能,我只想使用注释来完成此操作。您需要为converter config创建一个配置类 @Configuration @EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class }) @Profile("!testing") public class MongoConfig extends AbstractMongoConfi

如何使用Spring Boot在MongoTemplate中注册自定义转换器?如果可能,我只想使用注释来完成此操作。

您需要为converter config创建一个配置类

@Configuration
@EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class })
@Profile("!testing")
public class MongoConfig extends AbstractMongoConfiguration {
    @Value("${spring.data.mongodb.host}")  //if it is stored in application.yml, else hard code it here
    private String host;

    @Value("${spring.data.mongodb.port}")
    private Integer port;

    @Override
    protected String getDatabaseName() {
        return "test";
    }

    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient(host, port);
    }

    @Override
    public String getMappingBasePackage() {
        return "com.base.package";
    }

    @Override
    public CustomConversions customConversions() {
        List<Converter<?, ?>> converters = new ArrayList<>();
        converters.add(new LongToDateTimeConverter());
        return new CustomConversions(converters);
    }
}
@ReadingConverter
static class LongToDateTimeConverter implements Converter<Long, Date> {
    @Override
    public Date convert(Long source) {
        if (source == null) {
            return null;
        }
        return new Date(source);
    }
}
@配置
@EnableAutoConfiguration(排除={EmbeddedMongoutoConfiguration.class})
@配置文件(“测试”)
公共类MongoConfig扩展了AbstractMongoConfiguration{
@值(${spring.data.mongodb.host}”)//如果它存储在application.yml中,则在此处硬编码
私有字符串主机;
@值(${spring.data.mongodb.port}”)
专用整数端口;
@凌驾
受保护的字符串getDatabaseName(){
返回“测试”;
}
@豆子
public Mongo Mongo()引发异常{
返回新的MongoClient(主机、端口);
}
@凌驾
公共字符串getMappingBasePackage(){
返回“com.base.package”;
}
@凌驾
公共CustomConversions CustomConversions(){

列表如果您只想覆盖Spring Boot配置中的自定义转换器部分,则只需创建一个配置类,为自定义转换器提供@Bean。如果您不想覆盖所有其他Mongo设置(URI、数据库名称、主机、端口等),这非常方便Spring引导已从application.properties文件中为您连接

@配置
公共类MongoConfig
{
@豆子
公共CustomConversions CustomConversions()
{
列表>();
添加(新的MyCustomWriterConverter());
返回新的CustomConversions(转换器列表);
}
}
仅当您启用了自动配置并排除了DataSourceAutoConfig:

@SpringBootApplication(scanBasePackages={“com.mypackage”})
@EnableMongorPositories(basePackages={“com.mypackage.repository”})
@EnableAutoConfiguration(排除={DataSourceAutoConfiguration.class})
公共类MyApplication
{
公共静态void main(字符串[]args)
{
run(MyApplication.class,args);
}
}
在本例中,我将在application.properties文件中设置URI,并使用Spring数据存储库:

#mongodb settings
spring.data.mongodb.uri=mongodb://localhost:27017/mydatabase
spring.data.mongodb.repositories.enabled=true

我只是注册了这个bean:

@Bean
public MongoCustomConversions mongoCustomConversions() {
    List list = new ArrayList<>();
    list.add(myNewConverter());
    return new MongoCustomConversions(list);
}
@Bean
公共MongoCustomConversions MongoCustomConversions(){
列表=新的ArrayList();
添加(myNewConverter());
返回新的MongoCustomConversions(列表);
}

当我这样做时,我总是会得到:com.refactors.fines.repo.SaleRepository中的字段mongoTemplate需要找不到类型为“org.springframework.data.mongodb.core.mongoTemplate”的bean。-未加载“MongoDataAutoConfiguration”中的bean方法“mongoTemplate”,因为@ConditionalOnMissingBean(类型:org.springframework.data.mongodb.core.MongoTemplate;搜索策略:全部)找到bean“mongoTemplate”您是否在pom文件中添加了Mongo依赖项。另外,请检查此注释,@enableautoconfiguration他没有扫描这个类,尽管它应该扫描。我移动到主包,它可以工作。谢谢。我知道这是一篇旧文章,但您介意指定转换器和自定义转换的确切包吗来自?谢谢!org.springframework.data.mongodb.core.convert.CustomConversions和org.springframework.core.convert.converter.converter