diff --git a/.idea/sonarlint/issuestore/5/0/5004442f77e22ef4c1d07b99806239bb7fb7ffbd b/.idea/sonarlint/issuestore/5/0/5004442f77e22ef4c1d07b99806239bb7fb7ffbd deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/7/c/7ce726513da4afdbc3421b816e8def845a39a0bb b/.idea/sonarlint/issuestore/7/c/7ce726513da4afdbc3421b816e8def845a39a0bb deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/8/4/840a68431ce1f8c33ff92941ebcdc18c832f00e4 b/.idea/sonarlint/issuestore/8/4/840a68431ce1f8c33ff92941ebcdc18c832f00e4 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/c/7/c7c64afb3a3f5619d858fe5fe9a82458744eea6c b/.idea/sonarlint/issuestore/c/7/c7c64afb3a3f5619d858fe5fe9a82458744eea6c deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/issuestore/e/9/e9e9c8aa0ae1931dc6e028fc6aa2a4445d3ba19e b/.idea/sonarlint/issuestore/e/9/e9e9c8aa0ae1931dc6e028fc6aa2a4445d3ba19e deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/1/f/1fd70d40f7c9cb50a47ee5948b3fd37458651d5f b/.idea/sonarlint/securityhotspotstore/1/f/1fd70d40f7c9cb50a47ee5948b3fd37458651d5f deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/5/0/5004442f77e22ef4c1d07b99806239bb7fb7ffbd b/.idea/sonarlint/securityhotspotstore/5/0/5004442f77e22ef4c1d07b99806239bb7fb7ffbd deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/5/f/5f3e07e732703a75dec38fdc223ff19f81693be2 b/.idea/sonarlint/securityhotspotstore/5/f/5f3e07e732703a75dec38fdc223ff19f81693be2 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/7/c/7ce726513da4afdbc3421b816e8def845a39a0bb b/.idea/sonarlint/securityhotspotstore/7/c/7ce726513da4afdbc3421b816e8def845a39a0bb deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/8/4/840a68431ce1f8c33ff92941ebcdc18c832f00e4 b/.idea/sonarlint/securityhotspotstore/8/4/840a68431ce1f8c33ff92941ebcdc18c832f00e4 deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/a/a/aa608ec83cbef0157ad034a45ce178fe8d3e1f1d b/.idea/sonarlint/securityhotspotstore/a/a/aa608ec83cbef0157ad034a45ce178fe8d3e1f1d deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/c/7/c7c64afb3a3f5619d858fe5fe9a82458744eea6c b/.idea/sonarlint/securityhotspotstore/c/7/c7c64afb3a3f5619d858fe5fe9a82458744eea6c deleted file mode 100644 index e69de29..0000000 diff --git a/.idea/sonarlint/securityhotspotstore/d/5/d56c65f042936ed45626ea96a8a3be8a1f991518 b/.idea/sonarlint/securityhotspotstore/d/5/d56c65f042936ed45626ea96a8a3be8a1f991518 deleted file mode 100644 index e69de29..0000000 diff --git a/bonus-modules/bonus-mongodb/pom.xml b/bonus-modules/bonus-mongodb/pom.xml new file mode 100644 index 0000000..6eed84e --- /dev/null +++ b/bonus-modules/bonus-mongodb/pom.xml @@ -0,0 +1,104 @@ + + + 4.0.0 + + com.bonus + bonus-modules + 3.6.4 + + + com.bonus.mongoDB + bonus-modules-mongodb + + + 8 + 8 + UTF-8 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.github.tobato + fastdfs-client + + + + + io.minio + minio + ${minio.version} + + + + + com.bonus + bonus-api-system + + + + + com.bonus + bonus-common-swagger + + + org.springframework.boot + spring-boot-starter-data-mongodb + + + cn.hutool + hutool-all + 5.8.12 + + + + org.projectlombok + lombok + provided + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + \ No newline at end of file diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/BonusMongodbApplication.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/BonusMongodbApplication.java new file mode 100644 index 0000000..9dedd98 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/BonusMongodbApplication.java @@ -0,0 +1,25 @@ +package com.bonus.mongodb; + +import com.bonus.common.swagger.annotation.EnableCustomSwagger2; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; + +@EnableCustomSwagger2 +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) +public class BonusMongodbApplication { + public static void main(String[] args) + { + SpringApplication.run(BonusMongodbApplication.class, args); + System.out.println("(♥◠‿◠)ノ゙ MongoDB存储服务模块启动成功 ლ(´ڡ`ლ)゙ \n" + + " .-------. ____ __ \n" + + " | _ _ \\ \\ \\ / / \n" + + " | ( ' ) | \\ _. / ' \n" + + " |(_ o _) / _( )_ .' \n" + + " | (_,_).' __ ___(_ o _)' \n" + + " | |\\ \\ | || |(_,_)' \n" + + " | | \\ `' /| `-' / \n" + + " | | \\ / \\ / \n" + + " ''-' `'-' `-..-' "); + } +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/config/MongoConfig.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/config/MongoConfig.java new file mode 100644 index 0000000..6b97728 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/config/MongoConfig.java @@ -0,0 +1,63 @@ +package com.bonus.mongodb.config; + +import com.mongodb.client.MongoClient; +import com.mongodb.client.MongoClients; +import com.mongodb.client.MongoDatabase; +import com.mongodb.client.gridfs.GridFSBucket; +import com.mongodb.client.gridfs.GridFSBuckets; +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.net.URLEncoder; + + +/** + * @author coisini + * @version 1.0 + * @Description MongoDB配置类 + * @date Apr 17, 2022 + */ +@Configuration +@ConfigurationProperties(prefix = "spring.data.mongodb") +@Data +public class MongoConfig { + /** + * 数据库配置信息 + */ + private String database; + private String host; + private Integer port; + private String username; + private String password; + + // 移除静态修饰符,避免单例模式 + private MongoClient mongoClient; + + // 使用@Bean注解,并在方法内部进行异常处理 + @Bean + public MongoClient getMongoClient() { + if (mongoClient == null) { + try { + mongoClient = MongoClients.create(String.format("mongodb://%s:%s@%s:%d/%s", URLEncoder.encode(username, "UTF-8"),URLEncoder.encode(password, "UTF-8"), host, port, database)); + } catch (Exception e) { + // 在实际应用中应该有更详细的异常处理策略,例如记录日志并抛出自定义异常 + throw new RuntimeException("Failed to create MongoClient", e); + } + } + return mongoClient; + } + + // 直接返回MongoDatabase实例,依赖注入会处理实例的获取 + public MongoDatabase getMongoDatabase() { + return getMongoClient().getDatabase(database); + } + + // 创建GridFSBucket的@Bean方法,依赖注入MongoDatabase + @Bean + public GridFSBucket getGridFsBucket() { + return GridFSBuckets.create(getMongoDatabase()); + } +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/controller/MongodbController.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/controller/MongodbController.java new file mode 100644 index 0000000..f92d748 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/controller/MongodbController.java @@ -0,0 +1,75 @@ +package com.bonus.mongodb.controller; + +import com.bonus.common.core.domain.R; +import com.bonus.mongodb.damain.FileExportVo; +import com.bonus.mongodb.service.MongodbService; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; + +@RestController +@RequestMapping("/mongodb/") +@Slf4j +public class MongodbController { + + @Resource + private MongodbService mongodbService; + + @ApiOperation(value = "单文件上传") + @PostMapping("uploadFile") + public R uploadFile(MultipartFile file) { + try { + FileExportVo fileExportVo = mongodbService.uploadFile(file); + return R.ok(fileExportVo); + } catch (Exception e) { + log.error("单文件上传", e); + return R.fail(); + } + } + + @ApiOperation(value = "多文件上传") + @PostMapping("uploadFiles") + public R> uploadFiles(MultipartFile[] files) { + try { + List multipartFiles = Arrays.asList(files); + List list = mongodbService.uploadFiles(multipartFiles); + return R.ok(list); + } catch (Exception e) { + log.error("多文件上传", e); + return R.fail(); + } + } + + @ApiOperation(value = "文件删除") + @PostMapping("delFile") + public R delFile(String fileId) { + try { + mongodbService.removeFile(fileId); + return R.ok(); + } catch (Exception e) { + log.error("文件删除", e); + return R.fail(); + } + } + + @ApiOperation(value = "获取文件base64") + @PostMapping("getFileBase64") + public R getFileBase64(String fileId) { + try { + FileExportVo fileExportVo = mongodbService.downloadFile(fileId); + return R.ok(fileExportVo.getData()); + } catch (Exception e) { + log.error("获取文件base64", e); + return R.fail(); + } + } + +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/FileExportVo.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/FileExportVo.java new file mode 100644 index 0000000..863dc5d --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/FileExportVo.java @@ -0,0 +1,44 @@ +package com.bonus.mongodb.damain; + +import java.io.Serializable; +import java.util.Objects; +import cn.hutool.core.bean.BeanUtil; +import lombok.Data; + +@Data +public class FileExportVo implements Serializable { + + private String file; + + private String fileId; + + private String fileName; + + private String contentType; + + private String suffix; + + private long fileSize; + + private String sourceId; + + private String id; + + private String fileType; + /** + * 资源类型 + */ + private String sourceType; + + private String updaetTime; + + private byte[] data; + + public FileExportVo(MongoFile mongoFile) { + BeanUtil.copyProperties(mongoFile, this); + if (Objects.nonNull(mongoFile.getContent())) { + this.data = mongoFile.getContent().getData(); + } + this.fileId = mongoFile.getId(); + } +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/MongoFile.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/MongoFile.java new file mode 100644 index 0000000..d6ff709 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/damain/MongoFile.java @@ -0,0 +1,63 @@ +package com.bonus.mongodb.damain; + +import lombok.Builder; +import lombok.Data; +import org.bson.types.Binary; +import org.springframework.data.annotation.Id; +import org.springframework.data.mongodb.core.mapping.Document; +@Builder +@Data +@Document(collection = "files") +public class MongoFile { + /** + * 主键 + */ + @Id + public String id; + + /** + * 文件名称 + */ + public String fileName; + + /** + * 文件大小 + */ + public long fileSize; + + /** + * 上传时间 + */ + public String uploadDate; + + /** + * MD5值 + */ + public String md5; + + /** + * 文件内容 + */ + private Binary content; + + /** + * 文件类型 + */ + public String contentType; + + /** + * 文件后缀名 + */ + public String suffix; + + /** + * 文件描述 + */ + public String description; + + /** + * 大文件管理GridFS的ID + */ + private String gridFsId; + +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/repository/MongoFileRepository.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/repository/MongoFileRepository.java new file mode 100644 index 0000000..eafb1f7 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/repository/MongoFileRepository.java @@ -0,0 +1,8 @@ +package com.bonus.mongodb.repository; + +import com.bonus.mongodb.damain.MongoFile; +import org.springframework.data.mongodb.repository.MongoRepository; + +public interface MongoFileRepository extends MongoRepository { + +} \ No newline at end of file diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/MongodbService.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/MongodbService.java new file mode 100644 index 0000000..65d1e82 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/MongodbService.java @@ -0,0 +1,43 @@ +package com.bonus.mongodb.service; + +import com.bonus.mongodb.damain.FileExportVo; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +public interface MongodbService { + + /** + * 文件上传 + * + * @param file + * @return FileExportVo + * @throws Exception + * @description + * @date 2024/3/11 15:44 + */ + FileExportVo uploadFile(MultipartFile file) throws Exception; + + /** + * 多文件上传 + * + * @param files + * @return + */ + List uploadFiles(List files); + + /** + * 文件下载 + * + * @param fileId + * @return + */ + FileExportVo downloadFile(String fileId); + + /** + * 文件删除 + * + * @param fileId + */ + void removeFile(String fileId); +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/impl/MongodbServiceImpl.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/impl/MongodbServiceImpl.java new file mode 100644 index 0000000..2be52c8 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/service/impl/MongodbServiceImpl.java @@ -0,0 +1,279 @@ +package com.bonus.mongodb.service.impl; + + +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.IdUtil; +import com.bonus.common.core.utils.DateUtils; +import com.bonus.mongodb.damain.FileExportVo; +import com.bonus.mongodb.damain.MongoFile; +import com.bonus.mongodb.repository.MongoFileRepository; +import com.bonus.mongodb.service.MongodbService; +import com.bonus.mongodb.utils.Md5Util; +import com.mongodb.client.gridfs.GridFSBucket; +import com.mongodb.client.gridfs.GridFSDownloadStream; +import com.mongodb.client.gridfs.model.GridFSFile; +import lombok.RequiredArgsConstructor; +import org.bson.types.Binary; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.gridfs.GridFsResource; +import org.springframework.data.mongodb.gridfs.GridFsTemplate; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Objects; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class MongodbServiceImpl implements MongodbService { + + private static final Logger log = LoggerFactory.getLogger(MongodbServiceImpl.class); + private final MongoFileRepository mongoFileRepository; + private final MongoTemplate mongoTemplate; + private final GridFsTemplate gridFsTemplate; + private final GridFSBucket gridFSBucket; + + private static final int MAX_SIZE = 16777216; + private static final String SUFFIX = "."; + + + /** + * 多文件上传 + * + * @param files + * @return + */ + @Override + public List uploadFiles(List files) { + + return files.stream().map(file -> { + try { + return this.uploadFile(file); + } catch (Exception e) { + return null; + } + }).filter(Objects::nonNull).collect(Collectors.toList()); + } + + /** + * 文件上传 + * + * @param file + * @return + * @throws Exception + */ + @Override + public FileExportVo uploadFile(MultipartFile file) throws Exception { + if (file.getSize() > MAX_SIZE) { + return this.saveGridFsFile(file); + } else { + return this.saveBinaryFile(file); + } + } + + /** + * 文件下载 + * + * @param fileId + * @return + */ + @Override + public FileExportVo downloadFile(String fileId) { + Optional option = this.getBinaryFileById(fileId); + + if (option.isPresent()) { + MongoFile mongoFile = option.get(); + if (Objects.isNull(mongoFile.getContent())) { + option = this.getGridFsFileById(fileId); + } + } + + return option.map(FileExportVo::new).orElse(null); + } + + /** + * 文件删除 + * + * @param fileId + */ + @Override + public void removeFile(String fileId) { + Optional option = this.getBinaryFileById(fileId); + + if (option.isPresent()) { + if (Objects.nonNull(option.get().getGridFsId())) { + this.removeGridFsFile(fileId); + } else { + this.removeBinaryFile(fileId); + } + } + } + + /** + * 删除Binary文件 + * + * @param fileId + */ + public void removeBinaryFile(String fileId) { + mongoFileRepository.deleteById(fileId); + } + + /** + * 删除GridFs文件 + * + * @param fileId + */ + public void removeGridFsFile(String fileId) { + // TODO 根据id查询文件 + MongoFile mongoFile = mongoTemplate.findById(fileId, MongoFile.class); + if (Objects.nonNull(mongoFile)) { + // TODO 根据文件ID删除fs.files和fs.chunks中的记录 + Query deleteFileQuery = new Query().addCriteria(Criteria.where("filename").is(mongoFile.getGridFsId())); + gridFsTemplate.delete(deleteFileQuery); + // TODO 删除集合mongoFile中的数据 + Query deleteQuery = new Query(Criteria.where("id").is(fileId)); + mongoTemplate.remove(deleteQuery, MongoFile.class); + } + } + + /** + * 保存Binary文件(小文件) + * + * @param file + * @return + * @throws Exception + */ + public FileExportVo saveBinaryFile(MultipartFile file) throws Exception { + + String suffix = getFileSuffix(file); + MongoFile mongoFile = mongoFileRepository.save( + MongoFile.builder() + .fileName(file.getOriginalFilename()) + .fileSize(file.getSize()) + .content(new Binary(file.getBytes())) + .contentType(file.getContentType()) + .uploadDate(DateUtils.getTime()) + .suffix(suffix) + .md5(Md5Util.getMd5(file.getInputStream())) + .build() + ); + + return new FileExportVo(mongoFile); + } + + /** + * 保存GridFs文件(大文件) + * + * @param file + * @return + * @throws Exception + */ + public FileExportVo saveGridFsFile(MultipartFile file) throws Exception { + String suffix = getFileSuffix(file); + + String gridFsId = this.storeFileToGridFs(file.getInputStream(), file.getContentType()); + + MongoFile mongoFile = mongoTemplate.save( + MongoFile.builder() + .fileName(file.getOriginalFilename()) + .fileSize(file.getSize()) + .contentType(file.getContentType()) + .uploadDate(DateUtils.getTime()) + .suffix(suffix) + .md5(Md5Util.getMd5(file.getInputStream())) + .gridFsId(gridFsId) + .build() + ); + + return new FileExportVo(mongoFile); + } + + /** + * 上传文件到Mongodb的GridFs中 + * + * @param in + * @param contentType + * @return + */ + public String storeFileToGridFs(InputStream in, String contentType) throws IOException { + try { + String gridFsId = IdUtil.simpleUUID(); + // TODO 将文件存储进GridFS中 + gridFsTemplate.store(in, gridFsId, contentType); + return gridFsId; + }catch (Exception e){ + log.error("上传文件到Mongodb的GridFs中失败",e); + } + finally { + in.close(); + } + return null; + + } + + /** + * 获取Binary文件 + * + * @param id + * @return + */ + public Optional getBinaryFileById(String id) { + return mongoFileRepository.findById(id); + } + + /** + * 获取Grid文件 + * + * @param id + * @return + */ + public Optional getGridFsFileById(String id) { + MongoFile mongoFile = mongoTemplate.findById(id, MongoFile.class); + if (Objects.nonNull(mongoFile)) { + Query gridQuery = new Query().addCriteria(Criteria.where("filename").is(mongoFile.getGridFsId())); + try { + // TODO 根据id查询文件 + GridFSFile fsFile = gridFsTemplate.findOne(gridQuery); + // TODO 打开流下载对象 + GridFSDownloadStream in = gridFSBucket.openDownloadStream(fsFile.getObjectId()); + if (in.getGridFSFile().getLength() > 0) { + // TODO 获取流对象 + GridFsResource resource = new GridFsResource(fsFile, in); + // TODO 获取数据 + mongoFile.setContent(new Binary(IoUtil.readBytes(resource.getInputStream()))); + return Optional.of(mongoFile); + } else { + return Optional.empty(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return Optional.empty(); + } + + /** + * 获取文件后缀 + * + * @param file + * @return + */ + private String getFileSuffix(MultipartFile file) { + String suffix = ""; + if (Objects.requireNonNull(file.getOriginalFilename()).contains(SUFFIX)) { + suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); + } + return suffix; + } +} diff --git a/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/utils/Md5Util.java b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/utils/Md5Util.java new file mode 100644 index 0000000..f164d57 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/java/com/bonus/mongodb/utils/Md5Util.java @@ -0,0 +1,37 @@ +package com.bonus.mongodb.utils; + +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * @author 10488 + * @version 1.0 + * @Description MD5工具类 + * @date Apr 8, 2022 + */ +public class Md5Util { + /** + * 获取该输入流的MD5值 + */ + public static String getMd5(InputStream is) throws NoSuchAlgorithmException, IOException { + StringBuffer md5 = new StringBuffer(); + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] dataBytes = new byte[1024]; + + int nread = 0; + while ((nread = is.read(dataBytes)) != -1) { + md.update(dataBytes, 0, nread); + } + ; + byte[] mdbytes = md.digest(); + + // convert the byte to hex format + for (int i = 0; i < mdbytes.length; i++) { + md5.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1)); + } + is.close(); + return md5.toString(); + } +} \ No newline at end of file diff --git a/bonus-modules/bonus-mongodb/src/main/resources/banner.txt b/bonus-modules/bonus-mongodb/src/main/resources/banner.txt new file mode 100644 index 0000000..7046037 --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/resources/banner.txt @@ -0,0 +1,9 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} + _ _ + | | | | + | |__ ___ _ __ _ _ ___ ______ ___ | |__ ___ + | '_ \ / _ \ | '_ \ | | | | / __| |______| / _ \ | '_ \ / __| + | |_) | | (_) | | | | | | |_| | \__ \ | (_) | | |_) | \__ \ + |_.__/ \___/ |_| |_| \__,_| |___/ \___/ |_.__/ |___/ + diff --git a/bonus-modules/bonus-mongodb/src/main/resources/bootstrap.yml b/bonus-modules/bonus-mongodb/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..10eed1b --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/resources/bootstrap.yml @@ -0,0 +1,29 @@ +# Tomcat +server: + port: 9206 + +# Spring +spring: + application: + # 应用名称 + name: bonus-mongodb + profiles: + # 环境配置 + active: dev + cloud: + nacos: + username: nacos + password: nacos + discovery: + # 服务注册地址 + server-addr: 192.168.0.14:8848 + namespace: f1fcd3ea-9460-4597-8acd-0f334527017c + config: + # 配置中心地址 + server-addr: 192.168.0.14:8848 + namespace: f1fcd3ea-9460-4597-8acd-0f334527017c + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} diff --git a/bonus-modules/bonus-mongodb/src/main/resources/logback.xml b/bonus-modules/bonus-mongodb/src/main/resources/logback.xml new file mode 100644 index 0000000..7607fdf --- /dev/null +++ b/bonus-modules/bonus-mongodb/src/main/resources/logback.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + \ No newline at end of file