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;
上一篇:
IDEA上Java项目控制台中文乱码