1. 程式人生 > >mongo和spring整合遇到mongoTemplate只能注入一次問題

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;