上回說到網盤的思路簡單設計以及和升級迭代的過程
詳細內容請回顧https://blog.51cto.com/yerikyu/2361380
本文主要是介紹,如何經過jHipster快速搭建網絡雲盤服務。
咱們使用jHipster構建一個web服務是一件簡單便捷的事情,啓動起來也很舒服的,以下圖所示,經過命令jhipster就能夠啓動該框架爲咱們提供建立項目的功能
以後是進行項目名稱的設置,還有包名,認證方式等配置設置。不懂的話,建議一直回車選擇默認配置,以後在數據庫選型這一欄,因爲項目須要,這裏咱們選擇mongodb。
以後咱們還須要選擇啓動倉庫,筆者習慣使用gradle
其餘的按照默認配置就行啦,以後仍是同樣的 ,一路回車暴擊,等待項目建立完成,大家會觀察到建立項目中,不斷的新建文件以及相關依賴的進度條,等待建立完成。
這樣就造成了咱們的構建的web服務了,服務能夠啓動了,然而畢竟是經過框架搭建起來的web服務仍是比較簡單的,咱們須要再進行個性化開發。在圖中咱們能夠看到一個清晰的後端服務框架
由於咱們在建立項目的過程當中,已經明確說明須要用到mangodb,所以,框架已經爲咱們提供了mangodb數據庫的docker-compose文件,咱們能夠直接使用的,不過此時docker container的數據是不會保存的,若是咱們重啓docker服務,將會致使數據丟失,所以咱們須要爲該容器掛載一個持久化卷,修改下docker-compose文件便可,設置鏡像自動重啓前端
version: '2' services: utils-mongodb: image: mongo:4.0.2 ports: - "27017:27017" volumes: - ~/volumes/jhipster/utils/mongodb/:/data/db/ restart: always
準備工做完成以後,咱們接下來是開始網盤功能的簡單開發了,在jHipster中,對象之間的關係能夠經過JDLJHipster Domain Language
來表達,其表達方式比較簡單,這個就是一個簡單的網盤邏輯關係設計git
entity UploadFile { uploadTime String } entity DownloadFile { name String downloadTime String count Instant } relationship OneToOne { UploadFile{name} to DownloadFile } // Set pagination options paginate * with infinite-scroll paginate * with pagination dto * with mapstruct // Set service options to all except few service all with serviceImpl // Set an angular suffix angularSuffix * with smallestpan
設計完成以後使用命令jHipster import-jdl ./jdl/p1.jdl 對該文件進行編譯,執行,至於具體原理本文不做深刻分析,下次有機會再說:)
執行以後是須要生成數據庫mapper層來完成對數據的自動寫入讀出功能./gradew build
github
生成結果以下
接下來是對service進行開發,基於前面jdl自動生成的DTO、impl等文件,咱們須要的就是對接口進行調通,不妨開發一個接口類,實現上傳和下載,網盤不就是這樣嘛,一個遠端的存儲設備,提供上傳和下載功能嘛web
@Service public class FileServiceImpl implements FileService { @Override public Object upload(Object object) { return null; } @Override public Object download(Object object) { return null; } }
這裏咱們主要使用spring-cloud框架中的Grid這個組件,實現ORM的功能,完成對mongodb數據庫的寫入寫出,提升咱們的開發效率,不過這樣作從必定程度上下降代碼的運行效率,這個優化思路並非本文介紹內容spring
@Service public class GridfsService { @Autowired private MongoDbFactory mongodbfactory; /** * 插入文件 * @param file * @return */ public GridFSInputFile save(MultipartFile file){ GridFS gridFS = new GridFS(mongodbfactory.getLegacyDb()); try{ InputStream in = file.getInputStream(); String name = file.getOriginalFilename(); GridFSInputFile gridFSInputFile = gridFS.createFile(in); gridFSInputFile.setFilename(name); gridFSInputFile.setContentType(file.getContentType()); gridFSInputFile.save(); return gridFSInputFile; } catch (Exception e){} return null; } /** * 據id返回文件 */ public GridFSDBFile getById(ObjectId id){ DBObject query = new BasicDBObject("_id", id); GridFS gridFS = new GridFS(mongodbfactory.getLegacyDb()); GridFSDBFile gridFSDBFile = gridFS.findOne(query); return gridFSDBFile; } /** * 刪除 * @param id */ public void remove(String id) { GridFS gridFS = new GridFS(mongodbfactory.getLegacyDb()); gridFS.remove(new ObjectId(id)); } public void setMongodbfactory(MongoDbFactory mongodbfactory) { this.mongodbfactory = mongodbfactory; } }
好了,開發至此,代碼就已然開發完畢了,能夠正式啓用這個超簡潔的小小盤,至於說接口格式,網絡請求路徑等這些,jHipster都已經爲你自動生成好了,就在web.rest裏面,各位看官不妨閱讀下源碼,卻是簡潔易懂呢,因爲這個只是後臺頁面,因此能夠經過postman這樣的調試工具對這個功能進行測試便可,後面有機會在來介紹該頁面的前端開發
使用jHipster這樣的框架輔助咱們開發給咱們減小了不少工做量,妥妥提高咱們開發的幸福感:)mongodb
代碼僅供參考,不妨來個star:https://github.com/Yerikshu/smallestpan
謝啦~~docker
文章參考:
jHipster官方網站:https://www.jhipster.tech
Grid介紹:https://www.baeldung.com/spring-data-mongodb-gridfs數據庫