zoukankan      html  css  js  c++  java
  • 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));
    	}
    
    }
    

      

  • 相关阅读:
    输入成绩看等级
    java输入学生成绩
    java基础
    关于session
    关于XML
    Java EE Map
    互联网应用和企业级应用的区别
    Java EE学习目标
    软件工程-来换网-软件度量
    web前端--学习成果
  • 原文地址:https://www.cnblogs.com/e206842/p/9016182.html
Copyright © 2011-2022 走看看