<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>java
#mongodb setting
mongo.replicaSet=XXXXX:27017
mongo.port=27017
mongo.username=XXXXX
mongo.password=XXXX
mongo.authdbname=XXXX
mongo.dbname=XXXXXX
mongo.connectionsPerHost=100
mongo.threadsAllowedToBlockForConnectionMultiplier=50
mongo.connectTimeout=30000
mongo.socketTimeout=30000
mongo.writeConcern=0spring
<mongo:mongo-client id="mongo"
replica-set="${mongo.replicaSet}"
credentials="${mongo.username}:${mongo.password}@${mongo.authdbname}">
<mongo:client-options connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
socket-timeout="${mongo.socketTimeout}"
write-concern="SAFE" />
</mongo:mongo-client>
<!-- mongo的工厂,经过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动建立 -->
<mongo:db-factory id="mongoDbFactory" dbname="${mongo.dbname}" mongo-ref="mongo" />
<!-- 读写分离级别配置 -->
<!-- 首选主节点,大多状况下读操做在主节点,若是主节点不可用,如故障转移,读操做在从节点。 -->
<bean id="primaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.PrimaryPreferredReadPreference"></bean>
<!-- 最邻近节点,读操做在最邻近的成员,多是主节点或者从节点。 -->
<bean id="nearestReadPreference" class="com.mongodb.TaggableReadPreference.NearestReadPreference"></bean>
<!-- 从节点,读操做只在从节点, 若是从节点不可用,报错或者抛出异常。存在的问题是secondary节点的数据会比primary节点数据旧。 -->
<bean id="secondaryReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryReadPreference"></bean>
<!-- 优先从secondary节点进行读取操做,secondary节点不可用时从主节点读取数据 -->
<bean id="secondaryPreferredReadPreference" class="com.mongodb.TaggableReadPreference.SecondaryPreferredReadPreference"></bean>
<!-- mongodb的主要操做对象,全部对mongodb的增删改查的操做都是经过它完成 -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
<property name="readPreference" ref="secondaryPreferredReadPreference" />
</bean>
<!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们做为mongodb的一个collection的映射 -->
<mongo:mapping-converter base-package="com.XXXXXX.dao.mongo.model" />
<!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->
<mongo:repositories base-package="com.XXXXXX.dao.mongo" />mongodb
public interface ClassifyBaseDao extends MongoRepository<ClassifyBase, ObjectId> {数据库
@SuppressWarnings("unchecked")
public ClassifyBase insert(ClassifyBase classifyBase);app
@Query("{key : ?0, class_1 : ?1, class_2 : ?2, class_3 : ?3, class_4 : ?4}")
public ClassifyBase findOne(String key, String class1, String class2, String class3, String class4);dom
}socket
@Document(collection = "ClassifyBase")
@TypeAlias("ClassifyBase")
@Data
public class ClassifyBase {ide
@Id
private String id;spa
@Field("key")
private String key;.net
@Field("classified_angle")
private String classifiedAngle;
@Field("class_1")
private String class1;
@Field("class_2")
private String class2;
@Field("class_3")
private String class3;
@Field("class_4")
private String class4;
@Field("create_time")
private Date createTime;
@Field("target_category_id")
private String tid;
@Field("target_category_name")
private String tname;
@Field("category_id")
private String categoryId;
@Field("category_name")
private String cname;
@Field("app_id")
private Integer appId;
@Field("app_name")
private String appName;
@Field("app_category_id")
private String appCategoryId;
@Field("app_category_name")
private String appCategoryName;
}
MongoRepository中定义了一些增删改查的方法,而且它PagingAndSortingRepository接口
@NoRepositoryBean
public interface MongoRepository<T, ID extends Serializable>
extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#save(java.lang.Iterable)
*/
@Override
<S extends T> List<S> save(Iterable<S> entites);
/*
* (non-Javadoc)
* @see org.springframework.data.repository.CrudRepository#findAll()
*/
@Override
List<T> findAll();
/*
* (non-Javadoc)
* @see org.springframework.data.repository.PagingAndSortingRepository#findAll(org.springframework.data.domain.Sort)
*/
@Override
List<T> findAll(Sort sort);
/**
* Inserts the given entity. Assumes the instance to be new to be able to apply insertion optimizations. Use
* the returned instance for further operations as the save operation might have changed the entity instance
* completely. Prefer using {@link #save(Object)} instead to avoid the usage of store-specific API.
*
* @param entity must not be {@literal null}.
* @return the saved entity
* @since 1.7
*/
<S extends T> S insert(S entity);
/**
* Inserts the given entities. Assumes the given entities to have not been persisted yet and thus will optimize the
* insert over a call to {@link #save(Iterable)}. Prefer using {@link #save(Iterable)} to avoid the usage of store
* specific API.
*
* @param entities must not be {@literal null}.
* @return the saved entities
* @since 1.7
*/
<S extends T> List<S> insert(Iterable<S> entities);
/*
* (non-Javadoc)
* @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example)
*/
@Override
<S extends T> List<S> findAll(Example<S> example);
/*
* (non-Javadoc)
* @see org.springframework.data.repository.query.QueryByExampleExecutor#findAll(org.springframework.data.domain.Example, org.springframework.data.domain.Sort)
*/
@Override
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}
@NoRepositoryBean
public abstract interface PagingAndSortingRepository<T, ID extends Serializable>
extends CrudRepository<T, ID>
{
public abstract Iterable<T> findAll(Sort paramSort);
public abstract Page<T> findAll(Pageable paramPageable);
}
PagingAndSortingRepository定义了分页的抽象方法,这里的参数Pageable paramPageable是接口须要本身定义实现类
mongdb官方安装教程 https://docs.mongodb.com/manual/tutorial/install-mongodb-on-red-hat/
https://blog.csdn.net/qq_35534453/article/details/67639620
https://blog.csdn.net/canot/article/details/51571343