mongodb工具类

pom.xml文件增加Mongodb jar包

<dependency>
   		 <groupId>org.mongodb</groupId>
    	 <artifactId>mongo-java-driver</artifactId>
   		 <version>3.4.0</version>
	</dependency>

	<dependency>
   		 <groupId>org.springframework.data</groupId>
  		  <artifactId>spring-data-mongodb</artifactId>
  		  <version>1.10.3.RELEASE</version>
	</dependency>

  src/main/resources下增加mongodb.properties

mongoip=127.0.0.1
mongoport=27017
mongodatabase=VulnSubmit

connections_per_host=10
max_wait_time=120000
connect_timeout=0

mongo_user=sysadmin
mongo_pass=simple123456

  Mongodb工具类

package com.vulnverify.core.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.UUID;

import javax.validation.constraints.Null;

import org.bson.types.ObjectId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.gridfs.GridFSBucket;
import com.mongodb.client.gridfs.GridFSBuckets;
import com.mongodb.client.model.Filters;

/**
 * MongoDB 工具类
 * 方便进行文件的上传与下载
 * 共提供上传、下载、删除文件工具类
 * 
 * @author linan
 * @since 20170517
 */
public class GeneralMongoDbUtil {

	private final static Properties PROPERTIES = new Properties();
	private final static Logger logger = LoggerFactory.getLogger(GeneralMongoDbUtil.class);

	static {
		try {
			URL url = GeneralMongoDbUtil.class.getClassLoader().getResource("mongodb.properties");
			if (url != null) {
				logger.info("Found 'mongodb.properties' file in local classpath");
				InputStream inputStream = url.openStream();
				try {
					PROPERTIES.load(inputStream);
				} catch (Exception e) {
					e.printStackTrace();
				} finally {
					inputStream.close();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			logger.info("Could not load 'mongo_db.properties' file from local classpath: " + e);
		}
	}

	public GeneralMongoDbUtil() {
	}

	private static class Config {

		/**
		 * MongoDB connection properties
		 */
		public static String ip = null;
		public static int port = 27017;
		public static String database = null;

		/**
		 * MongoDB connection pool properties
		 */
		public static int connectionsPerHost = 10;
		public static int maxWaitTime = 120000;
		public static int connectTimeout = 0;
		public static boolean socketKeepAlive = true;
		public static int socketTimeout = 150000;

		public static MongoClientOptions mongoClientOptions = null;

		/**
		 * 用户及凭证
		 */
		public static List<MongoCredential> credentialList = new ArrayList<MongoCredential>();

		static {
			ip = PROPERTIES.getProperty("mongoip");
			port = Integer.parseInt(PROPERTIES.getProperty("mongoport"));
			database = PROPERTIES.getProperty("mongodatabase");

			connectionsPerHost = Integer.parseInt(PROPERTIES.getProperty("connections_per_host"));
			maxWaitTime = Integer.parseInt(PROPERTIES.getProperty("max_wait_time"));
			connectTimeout = Integer.parseInt(PROPERTIES.getProperty("connect_timeout"));
			socketKeepAlive = true;
			socketTimeout = 150000;

			mongoClientOptions = MongoClientOptions.builder()
					.connectTimeout(connectTimeout)
					.maxWaitTime(maxWaitTime)
					.connectionsPerHost(connectionsPerHost)
					.socketKeepAlive(socketKeepAlive)
					.socketTimeout(socketTimeout)
					.build();

			/**
			 * 认证与凭证
			 * 
			 */
			MongoCredential credential = MongoCredential.createCredential(
					PROPERTIES.getProperty("mongo_user"), database,
					PROPERTIES.getProperty("mongo_pass").toCharArray());

			credentialList.add(credential);

		}
	}

	private static final class MongoInstance {
		public final static MongoClient client;
		static {
			// client = new MongoClient(new ServerAddress(Config.ip,
			// Config.port), Config.credentialList, Config.mongoClientOptions);
			client = new MongoClient(new ServerAddress(Config.ip, Config.port), Config.mongoClientOptions);
		}
	}

	/**
	 * destroy pool
	 */
	public static final void destroy() {
		MongoInstance.client.close();
	}

	/**
	 * get a MongoDatabase
	 * 
	 * @return
	 */
	public static MongoDatabase getDatabase() {
		return MongoInstance.client.getDatabase(Config.database);
	}
	
	public static MongoDatabase getGridFsDatabase() {
		return MongoInstance.client.getDatabase("gridfs");
	}

	/**
	 * get a MongoDatabase by Name
	 * 
	 * @param databaseName
	 * @return
	 */
	public static MongoDatabase getDatabase(String databaseName) {
		return MongoInstance.client.getDatabase(databaseName);
	}

	// //////////////////以下为上传内容//////////////////////////////

	/**
	 * 上传文件 到 MongoDB
	 * 
	 * @param destinationName
	 * @param inputStream
	 * @return
	 */
	public static String uploadFileToGridFS(String destinationName, InputStream inputStream, String bucketName) {
		/**
		 * 缺省桶名是 fs
		 */
		GridFSBucket bucket = GridFSBuckets.create(getDatabase(), bucketName);
		ObjectId fileId = bucket.uploadFromStream(destinationName, inputStream);
		return fileId.toHexString();
	}

	/**
	 * 上传文件 到 MongoDB,可以选择关闭流
	 * 
	 * @param destinationName
	 * @param inputStream
	 * @param close
	 * @return
	 */
	public static String uploadFileToGridFS(String destinationName, InputStream inputStream, String bucketName, boolean close) {
		String fileId = null;
		try {
			fileId = uploadFileToGridFS(destinationName, inputStream, bucketName);
		} finally {
			if (close) {
				try {
					inputStream.close();
				} catch (IOException e) {
					logger.info("close inputstream fail:" + e);
				}
			}
		}
		return fileId;
	}

	/**
	 * 上传文件 到 MongoDB,参数为 File
	 * 
	 * @param destinationName
	 * @param file
	 * @return
	 */
	public static String uploadFileToGridFs(String destinationName, File file, String bucketName) {
		InputStream inputStream = null;
		try {
			inputStream = new FileInputStream(file);
			String fileId = uploadFileToGridFS(destinationName, inputStream, bucketName, true);
			return fileId;
		} catch (IOException e) {
			logger.info("upload fail:" + e);
		}
		return null;
	}

	/**
	 * 上传文件 到 MongoDB,文件名不变上传
	 * 
	 * @param file
	 * @return
	 */
	public static String uploadFileToGridFs(File file, String bucketName) {
		return uploadFileToGridFs(file.getName(), file, bucketName);
	}

	/**
	 * 上传文件 到 MongoDB,文件名加入UUID
	 * 
	 * @param file
	 * @return
	 */
	public static String uploadFileToGridFSByUUID(File file, String bucketName) {
		return uploadFileToGridFs(UUID.randomUUID().toString(), file, bucketName);
	}

	// //////////////////以下为下载内容//////////////////////////////
	
	/**
	 * 通过 文件名 从MongoDB 下载文件
	 * 
	 * @param sourceName
	 * @param outputStream
	 */
	public static void downloadFileByName(String sourceName, OutputStream outputStream, String bucketName) {
		GridFSBucket bucket = GridFSBuckets.create(getDatabase(), bucketName);
		bucket.downloadToStream(sourceName, outputStream);

	}

	/**
	 * 通过 objectid 从MongoDB 下载文件
	 * 
	 * @param objectId
	 * @param outputStream
	 */
	public static void downloadFile(String objectId, OutputStream outputStream, String bucketName) {
		/**
		 * 缺省桶名是 fs
		 */
		GridFSBucket bucket = GridFSBuckets.create(getDatabase(), bucketName);
		bucket.downloadToStream(new ObjectId(objectId), outputStream);
	}
	
	/**
	 * 从mongodb获取文件名称
	 * @param objectId
	 * @param outputStream
	 * @param 文件名称
	 */
	public static String getFileName(String objectId, String bucketName) {
		GridFSBucket bucket = GridFSBuckets.create(getDatabase(), bucketName);
		String fileName = bucket.find(Filters.eq("_id",new ObjectId(objectId))).first().getFilename();
		return fileName;
	}
	
	/**
	 * 通过 objectid 从MongoDB 下载文件
	 * 
	 * @param objectId
	 * @param outputStream
	 */
	public static String downloadTaskResultFile(String objectId, OutputStream outputStream) {
		/**
		 * 缺省桶名是 fs
		 */
		GridFSBucket bucket = GridFSBuckets.create(getGridFsDatabase(), "bucketme");
		String fileName = bucket.find(Filters.eq("_id",new ObjectId(objectId))).first().getFilename();
		bucket.downloadToStream(new ObjectId(objectId), outputStream);
		return fileName;
	}
	
	/**
	 * 通过 objectid 从MongoDB 下载文件
	 * 
	 * @param objectId
	 * @param destinationFile
	 */
	public static void downloadFile(String objectId, File destinationFile, String bucketName) {
		OutputStream outputStream = null;
		try {
			outputStream = new FileOutputStream(destinationFile);
			downloadFile(objectId, outputStream, bucketName);
		} catch (IOException e) {
			logger.info("download fail:" + e);
		} finally {
			if (outputStream != null) {
				try {
					outputStream.close();
				} catch (IOException e) {
					logger.info("close outputstream fail:" + e);
				}
			}
		}
	}

	/**
	 * 通过 objectid 从MongoDB 下载文件
	 * 
	 * @param objectId
	 * @param destinationName
	 */
	public static void downloadFile(String objectId, String destinationName, String bucketName) {
		File destinationFile = new File(destinationName);
		downloadFile(objectId, destinationFile, bucketName);
	}


	/**
	 * 通过 objectId 从MongoDB 删除文件
	 * 
	 * @param objectId
	 */
	public static void deleteByObjectId(String objectId, String bucketName) {
		GridFSBucket bucket = GridFSBuckets.create(getDatabase(), bucketName);
		bucket.delete(new ObjectId(objectId));
	}

}

  

posted @ 2018-05-09 19:34  深夜、程序、与烟  阅读(315)  评论(0编辑  收藏  举报