mongo和spring整合遇到mongoTemplate只能注入一次问题

解决方案1 (只注入一次MongoTemplate)

/**
 * <p>Title: xescm-adc </p>
 * <p>Package com.xescm.adc.service </p>
 * <p>Description:  由于spring和mongo在整合中,发现MongoTemplate只能实例化一次,故而将MongoTemplate提出公共Service</p>
 *
 * @author BOBO
 * @date 2018/9/12下午1:26
 */
public interface MongoService {
          
   

    /**
     * 查询Mongo数据
     * @param query 查询体
     * @param entityClass 具体的实体类
     * @param <T> 泛型
     * @return List<T>
     */
     <T> List<T> find(Query query, Class<T> entityClass);

    /**
     * 查询所有的数据
     * @param entityClass 具体的实体类
     * @param <T> 泛型
     * @return List<T>
     */
    <T> List<T> findAll(Class<T> entityClass);

    /**
     * mongo管道
     * @param aggregation 管道参数
     * @param outputType 输出类型
     * @param <T> 泛型
     * @return  AggregationResults<T>
     */
    <T> AggregationResults<T> aggregate(TypedAggregation<?> aggregation, Class<T> outputType);

    /**
     * mongo管道
     * @param aggregation 管道参数
     * @param inputType 输入类型
     * @param outputType 输入类型
     * @param <O> 泛型
     * @return AggregationResults<O>
     */
    <O> AggregationResults<O> aggregate(Aggregation aggregation, Class<?> inputType, Class<O> outputType);

    /**
     * 删除操作
     * @param query 删除条件体
     * @param entityClass 具体的实体类
     * @return WriteResult
     */
    WriteResult remove(Query query, Class<?> entityClass);

    /**
     * 保存操作
     * @param o 保存参数
     */
    void save(Object o);
}

提出方法后,在方法调用时,不用注入MongoTemplate,而是注入mongoService。调用mongoService中的方法。

@Service
public class TransportFinanceDailyServiceImpl implements TransportFinanceDailyService {
          
   

    protected Logger logger = LoggerFactory.getLogger(this.getClass());

    @Resource
    private MongoService mongoService;

    public void mongoMethod(Object o){

        mongoService.save(o)
    }
}

解决方法2 (jvm加载时,自动生成一个注入类。每次调用mongoTemplate时,都创建一个新的实例)

/**
 * MongoConfig
 *
 * @author BOBO
 * <p>Description: 当做一个配置类处理,每次注入mongoTemplate时都是创建一个新的对象来处理 </p>
 * @CreateDate 2018/9/12
 */
@Configuration
@ConfigurationProperties(prefix = "mongodb")
@SuppressWarnings("all")
public class MongoConfig {
          
   

    private Logger logger = LoggerFactory.getLogger(MongoConfig.class);

    @Value("${mongodb.uri}")
    private String mongodbUri;

    @Bean
    public MongoTemplate mongoTemplate() throws UnknownHostException {
        logger.info("mongodbUri==>{}", this.mongodbUri);
        return new MongoTemplate(new SimpleMongoDbFactory(new MongoClientURI(mongodbUri)));
    }

}

//此方法需要注意一个问题是, mongo链接数据库的配置不能使用默认的 spring.data.mongodb.uri = xxxx, 需要配置其他spring不能识别的普通配置。mongodb.uri

编写完成后, 在调用注入mongoTemplate时,需要如下调用

//使用MongoOperations注入
@Autowired
    private MongoOperations mongoTemplate;
经验分享 程序员 微信小程序 职场和发展