spring4.3.10整合spring-data-mongodb.1.7.1.RELEASE,实现mongodb存储日志

maven pom.xml依赖

<!--spring结合mongodb-->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>1.7.1.RELEASE</version>
</dependency>

spring-mongodb.xml配置 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mongo="http://www.springframework.org/schema/data/mongo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.ylzinfo.*" />
    <mongo:mongo id="mongo" host="${mongo.host}" port="${mongo.port}">
        <mongo:options
                connections-per-host="${mongo.connectionsPerHost}"
                threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
                connect-timeout="${mongo.connectTimeout}"
                max-wait-time="${mongo.maxWaitTime}"
                auto-connect-retry="${mongo.autoConnectRetry}"
                socket-keep-alive="${mongo.socketKeepAlive}"
                socket-timeout="${mongo.socketTimeout}"
                slave-ok="${mongo.slaveOk}"
                write-number="1"
                write-timeout="0" write-fsync="true"/>
    </mongo:mongo>
    <!-- 设置使用的数据库 名-->
    <mongo:db-factory id="mongoDbFactory" dbname="wxsb" mongo-ref="mongo" username="${mongo.username}" password="${mongo.password}"/>
    <!-- mongodb的模板 -->
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
        <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
    </bean>
</beans>

 mongodb.properties配置

profile.active=dev
mongo.host=192.168.44.101
mongo.port=27017
mongo.username=
mongo.password=
#一个线程变为可用的最大阻塞数
mongo.connectionsPerHost=8
#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
mongo.threadsAllowedToBlockForConnectionMultiplier=4
#连接超时时间
mongo.connectTimeout=1000
#等待时间
mongo.maxWaitTime=1500
#自动重连
mongo.autoConnectRetry=true
#scoket保持活动
mongo.socketKeepAlive=true
#Socket超时时间
mongo.socketTimeout=1500
#读写分离
mongo.slaveOk=true

定义BaseMongoDao,使用MongoTemplate,操作mongodb

public abstract class BaseMongoDao<T> {

    @Autowired
    protected MongoTemplate mongoTemplate;

    /**
     * 保存一个对象
     * @param t
     */
    public void save(T t) {
        this.mongoTemplate.save(t);
    }

    /**
     * 批量保存对象
     * @param list
     */
    public void insertList(List<T> list) {
        this.mongoTemplate.insertAll(list);
    }

    /**
     * 查询所有
     * @return
     */
    public List<T> queryAll() {
        return this.mongoTemplate.findAll(this.getEntityClass());
    }

    /**
     * 根据Id从Collection中查询对象
     * @param id
     * @return
     */
    public T queryById(String id) {
        Query query = new Query();
        Criteria criteria = Criteria.where("_id").is(id);
        query.addCriteria(criteria);
        return this.mongoTemplate.findOne(query, this.getEntityClass());
    }

    /**
     * 根据条件查询集合
     * @param query
     * @return
     */
    public List<T> queryList(Query query) {
        return this.mongoTemplate.find(query, this.getEntityClass());
    }

    /**
     * 通过条件查询单个实体
     * @param query
     * @return
     */
    public T queryOne(Query query) {
        return this.mongoTemplate.findOne(query, this.getEntityClass());
    }

    /**
     * 通过条件进行分页查询
     * @param query
     * @param start
     * @param size
     * @return
     */
    public List<T> getPage(Query query, int start, int size) {
        query.skip(start);
        query.limit(size);
        List<T> lists = this.mongoTemplate.find(query, this.getEntityClass());
        return lists;
    }

    /**
     * 根据条件查询库中符合记录的总数,为分页查询服务
     * @param query
     * @return
     */
    public Long getPageCount(Query query) {
        return this.mongoTemplate.count(query, this.getEntityClass());
    }

    /**
     * 根据Id删除用户
     * @param id
     */
    public void deleteById(String id) {
        Criteria criteria = Criteria.where("_id").in(id);
        if (null != criteria) {
            Query query = new Query(criteria);
            if (null != query && this.queryOne(query) != null) {
                this.mongoTemplate.remove(query);
            }
        }
    }

    /**
     * 更新满足条件的第一个记录
     * @param query
     * @param update
     */
    public void updateFirst(Query query, Update update) {
        this.mongoTemplate.updateFirst(query, update, this.getEntityClass());
    }

    /**
     * 更新满足条件的所有记录
     * @param query
     * @param update
     */
    public void updateMulti(Query query, Update update) {
        this.mongoTemplate.updateMulti(query, update, this.getEntityClass());
    }

    /**
     * 查找更新,如果没有找到符合的记录,则将更新的记录插入库中
     * @param query
     * @param update
     */
    public void updateInser(Query query, Update update) {
        this.mongoTemplate.upsert(query, update, this.getEntityClass());
    }

    /**
     * 删除对象
     * @param t
     * @return
     */
    public Integer delete(T t) {
        WriteResult writeResult = this.mongoTemplate.remove(t);
        return (null == writeResult ? 0 : writeResult.getN());

    }

    /**
     * 删除对象
     * @param query
     * @return
     */
    public Integer deleteByCondition(Query query) {
        WriteResult writeResult = this.mongoTemplate.remove(query, this.getEntityClass());
        return (null == writeResult ? 0 : writeResult.getN());

    }

    /**
     * 为属性自动注入bean服务
     * @param mongoTemplate
     */
    public void setMongoTemplate(MongoTemplate mongoTemplate) {
        this.mongoTemplate = mongoTemplate;
    }

    protected abstract Class<T> getEntityClass();
}

然后,自行定义具体的继承实现类

最后在service实现类里引用自定义的Dao,进行保存日志。这里不介绍了。 

猜你喜欢

转载自blog.csdn.net/u012373281/article/details/91046284
今日推荐