Java的新项目学成在线笔记-day6(三)
2019-02-14 16:30
856 查看
1.2.6 PageService
在Service中定义保存页面静态文件到服务器物理路径方法:
[mw_shl_code=applescript,true]package com.xuecheng.manage_cms_client.service; import com.mongodb.client.gridfs.GridFSBucket; import com.mongodb.client.gridfs.GridFSDownloadStream; import com.mongodb.client.gridfs.model.GridFSFile; import com.xuecheng.framework.domain.cms.CmsPage; import com.xuecheng.framework.domain.cms.CmsSite; import com.xuecheng.framework.domain.cms.response.CmsCode; import com.xuecheng.framework.exception.ExceptionCast; import com.xuecheng.manage_cms_client.dao.CmsPageRepository; import com.xuecheng.manage_cms_client.dao.CmsSiteRepository; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; 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 java.io.*; import java.util.Optional; /** * @author Administrator * @version 1.0 **/ @Service public class PageService { @Autowired CmsPageRepository cmsPageRepository; @Autowired CmsSiteRepository cmsSiteRepository; @Autowired GridFsTemplate gridFsTemplate; @Autowired GridFSBucket gridFSBucket; //将页面html保存到页面物理路径 public void savePageToServerPath(String pageId){ Optional<CmsPage> optional = cmsPageRepository.findById(pageId); if(!optional.isPresent()){ ExceptionCast.cast(CmsCode.CMS_PAGE_NOTEXISTS); } //取出页面物理路径 CmsPage cmsPage = optional.get(); //页面所属站点 CmsSite cmsSite = this.getCmsSiteById(cmsPage.getSiteId()); //页面物理路径 String pagePath = cmsSite.getSitePhysicalPath() + cmsPage.getPagePhysicalPath() + cmsPage.getPageName(); //查询页面静态文件 String htmlFileId = cmsPage.getHtmlFileId(); InputStream inputStream = this.getFileById(htmlFileId); if(inputStream == null){ ExceptionCast.cast(CmsCode.CMS_GENERATEHTML_HTMLISNULL); } FileOutputStream fileOutputStream = null; try { fileOutputStream = new FileOutputStream(new File(pagePath)); //将文件内容保存到服务物理路径 IOUtils.copy(inputStream,fileOutputStream); } catch (Exception e) { e.printStackTrace(); }finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } //根据文件id获取文件内容 public InputStream getFileById(String fileId){ try { GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId))); GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId()); GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream); return gridFsResource.getInputStream(); } catch (IOException e) { e.printStackTrace(); } return null; } //根据站点id得到站点 public CmsSite getCmsSiteById(String siteId){ Optional<CmsSite> optional = cmsSiteRepository.findById(siteId); if(optional.isPresent()){ CmsSite cmsSite = optional.get(); return cmsSite; } return null; } } [mw_shl_code=applescript,true] [/mw_shl_code][/mw_shl_code]
1.2.6ConsumerPostPage
在cms client工程的mq包下创建ConsumerPostPage类,ConsumerPostPage作为发布页面的消费客户端,监听 页面发布队列的消息,收到消息后从mongodb下载文件,保存在本地。
e.printStackTrace(); }finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } try { fileOutputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } //根据文件id获取文件内容 public InputStream getFileById(String fileId){ try { GridFSFile gridFSFile = gridFsTemplate.findOne(Query.query(Criteria.where("_id").is(fileId))); GridFSDownloadStream gridFSDownloadStream = gridFSBucket.openDownloadStream(gridFSFile.getObjectId()); GridFsResource gridFsResource = new GridFsResource(gridFSFile,gridFSDownloadStream); return gridFsResource.getInputStream(); } catch (IOException e) { e.printStackTrace(); } return null; } //根据站点id得到站点 public CmsSite getCmsSiteById(String siteId){ Optional<CmsSite> optional = cmsSiteRepository.findById(siteId); if(optional.isPresent()){ CmsSite cmsSite = optional.get(); return cmsSite; } return null; } } package com.xuecheng.manage_cms_client.mq; import com.alibaba.fastjson.JSON; import com.xuecheng.framework.domain.cms.CmsPage; import com.xuecheng.manage_cms_client.dao.CmsPageRepository; import com.xuecheng.manage_cms_client.service.PageService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.Map; import java.util.Optional; /** * @author Administrator * @version 1.0 **/ @Component public class ConsumerPostPage { private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerPostPage.class); @Autowired CmsPageRepository cmsPageRepository; @Autowired PageService pageService; @RabbitListener(queues={"${xuecheng.mq.queue}"}) public void postPage(String msg){ //解析消息 Map map = JSON.parseObject(msg, Map.class); LOGGER.info("receive cms post page:{}",msg.toString()); //取出页面id String pageId = (String) map.get("pageId"); //查询页面信息 Optional<CmsPage> optional = cmsPageRepository.findById(pageId); if(!optional.isPresent()){ LOGGER.error("receive cms post page,cmsPage is null:{}",msg.toString()); return ; } //将页面保存到服务器物理路径 pageService.savePageToServerPath(pageId); } }
相关文章推荐
- Java的新项目学成在线笔记-day2(三)
- 111c Java的新项目学成在线笔记-day4(二)
- Java的新项目学成在线笔记-day3(五)
- Java的新项目学成在线笔记-day4(六)
- Java的新项目学成在线笔记-day1(四)
- Java的新项目学成在线笔记-day4(四)
- Java的新项目学成在线笔记-day2(一)
- Java的新项目学成在线笔记-day2(五)
- Java的新项目学成在线笔记-day3(一)
- Java的新项目学成在线笔记-day3(十)
- Java的新项目学成在线笔记-day4(五)
- Java的新项目学成在线笔记-day5
- Java的新项目学成在线笔记-day3(八)
- Java的新项目学成在线笔记-day1(六)
- Java的新项目学成在线笔记-day3(二)
- java数据库系统项目开发实践笔记
- java项目,从Oracle迁移到达梦数据库笔记
- Java项目开发环境构建工具 Gradle 使用笔记(简单、基本)
- java笔记 项目分析
- 黑马程序员 java学习笔记 Day6:GUI