<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