All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.taotao.cloud.data.mongodb.configuration.SoaMongoConfig Maven / Gradle / Ivy

There is a newer version: 2024.09
Show newest version
package com.taotao.cloud.data.mongodb.configuration;

import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.convert.converter.Converter;
import org.springframework.data.convert.ReadingConverter;
import org.springframework.data.convert.WritingConverter;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoTransactionManager;
import org.springframework.data.mongodb.core.convert.MongoCustomConversions;


/**
 * HP-SOA Elasticsearch 配置
 */
@AutoConfiguration
@ConditionalOnExpression("'${spring.data.mongodb.uri:}' != '' || '${spring.data.mongodb.host:}' != ''")
public class SoaMongoConfig {

	public static final String zonedDateTimeProviderBeanName = "zonedDateTimeProvider";
	public static final String offsetDateTimeProviderBeanName = "offsetDateTimeProvider";

	/**
	 * 事务管理器(注:单机部署不支持事务)
	 */
	@Bean
	@ConditionalOnMissingBean(MongoTransactionManager.class)
	MongoTransactionManager transactionManager(MongoDatabaseFactory factory) {
		return new MongoTransactionManager(factory);
	}

//	/**
//	 * {@linkplain ZonedDateTime} 时间日期提供者
//	 */
//	@Bean(zonedDateTimeProviderBeanName)
//	@ConditionalOnMissingBean(name = zonedDateTimeProviderBeanName)
//	public ZonedDateTimeProvider zonedDateTimeProvider() {
//		return ZonedDateTimeProvider.INSTANCE;
//	}
//
//	/**
//	 * {@linkplain OffsetDateTime} 时间日期提供者
//	 */
//	@Bean(offsetDateTimeProviderBeanName)
//	@ConditionalOnMissingBean(name = offsetDateTimeProviderBeanName)
//	public OffsetDateTimeProvider offsetDateTimeProvider() {
//		return OffsetDateTimeProvider.INSTANCE;
//	}

	/**
	 * 自定义日期时间类型转换器
处理 Java Bean 的日期时间类型字段与 MongoDB Date 类型字段映射。 */ @Bean public MongoCustomConversions customConversions() { List> converters = new ArrayList<>(); // Date -> ZonedDateTime converters.add(DateToZonedDateTimeConverter.INSTANCE); // ZonedDateTime -> Date converters.add(ZonedDateTimeToDateConverter.INSTANCE); // Date -> OffsetDateTime converters.add(DateToOffsetDateTimeConverter.INSTANCE); // OffsetDateTime -> Date converters.add(OffsetDateTimeToDateConverter.INSTANCE); return new MongoCustomConversions(converters); } @ReadingConverter enum DateToZonedDateTimeConverter implements Converter { INSTANCE; @Override public ZonedDateTime convert(Date source) { return source == null ? null : ZonedDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault()); } } @WritingConverter enum ZonedDateTimeToDateConverter implements Converter { INSTANCE; @Override public Date convert(ZonedDateTime source) { return source == null ? null : Date.from(source.toInstant()); } } @ReadingConverter enum DateToOffsetDateTimeConverter implements Converter { INSTANCE; @Override public OffsetDateTime convert(Date source) { return source == null ? null : OffsetDateTime.ofInstant(source.toInstant(), ZoneId.systemDefault()); } } @WritingConverter enum OffsetDateTimeToDateConverter implements Converter { INSTANCE; @Override public Date convert(OffsetDateTime source) { return source == null ? null : Date.from(source.toInstant()); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy