From 82ce86311f084adc64612f617b9a17f6e327bf66 Mon Sep 17 00:00:00 2001 From: ruibaby Date: Wed, 5 Dec 2018 11:26:43 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E5=8F=96=E6=B6=88=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=EF=BC=8C=E6=96=B0=E5=A2=9E=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E7=AB=A0=E8=AE=BF=E9=97=AE=E9=87=8F?= =?UTF-8?q?=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StartedListener.java} | 25 +++------ .../cc/ryanc/halo/model/dto/HaloConst.java | 5 ++ .../cc/ryanc/halo/service/PostService.java | 7 +++ .../halo/service/impl/PostServiceImpl.java | 15 ++++++ .../java/cc/ryanc/halo/task/PostSyncTask.java | 34 ++++++++++++ .../java/cc/ryanc/halo/utils/SpringUtil.java | 52 +++++++++++++++++++ .../controller/admin/BackupController.java | 42 ++------------- .../front/FrontArchiveController.java | 12 ++--- .../controller/front/FrontPageController.java | 10 ++-- src/main/resources/config/cron.setting | 5 +- .../templates/admin/admin_backup.ftl | 36 ------------- 11 files changed, 136 insertions(+), 107 deletions(-) rename src/main/java/cc/ryanc/halo/{config/StartupConfig.java => listener/StartedListener.java} (96%) mode change 100755 => 100644 create mode 100644 src/main/java/cc/ryanc/halo/task/PostSyncTask.java create mode 100644 src/main/java/cc/ryanc/halo/utils/SpringUtil.java diff --git a/src/main/java/cc/ryanc/halo/config/StartupConfig.java b/src/main/java/cc/ryanc/halo/listener/StartedListener.java old mode 100755 new mode 100644 similarity index 96% rename from src/main/java/cc/ryanc/halo/config/StartupConfig.java rename to src/main/java/cc/ryanc/halo/listener/StartedListener.java index 651f71008..deb1d63e1 --- a/src/main/java/cc/ryanc/halo/config/StartupConfig.java +++ b/src/main/java/cc/ryanc/halo/listener/StartedListener.java @@ -1,9 +1,8 @@ -package cc.ryanc.halo.config; +package cc.ryanc.halo.listener; import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.Theme; import cc.ryanc.halo.model.enums.BlogPropertiesEnum; -import cc.ryanc.halo.model.enums.TrueFalseEnum; import cc.ryanc.halo.service.OptionsService; import cc.ryanc.halo.utils.HaloUtils; import cc.ryanc.halo.web.controller.core.BaseController; @@ -22,15 +21,15 @@ import java.util.Map; /** *
- *     应用启动的时候所执行的方法
+ *     应用启动完成后所执行的方法
  * 
* * @author : RYAN0UP - * @date : 2017/12/22 + * @date : 2018/12/5 */ @Slf4j @Configuration -public class StartupConfig implements ApplicationListener { +public class StartedListener implements ApplicationListener { @Autowired private OptionsService optionsService; @@ -48,7 +47,9 @@ public class StartupConfig implements ApplicationListener POSTS_VIEWS = new HashMap<>(); } diff --git a/src/main/java/cc/ryanc/halo/service/PostService.java b/src/main/java/cc/ryanc/halo/service/PostService.java index 452285ba3..9762e5ba0 100755 --- a/src/main/java/cc/ryanc/halo/service/PostService.java +++ b/src/main/java/cc/ryanc/halo/service/PostService.java @@ -275,4 +275,11 @@ public interface PostService { * @return String */ String buildSiteMap(List posts); + + /** + * 缓存阅读数 + * + * @param postId postId + */ + void cacheViews(Long postId); } diff --git a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java index f9eeded0b..e2d77cce0 100755 --- a/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java +++ b/src/main/java/cc/ryanc/halo/service/impl/PostServiceImpl.java @@ -4,6 +4,7 @@ import cc.ryanc.halo.model.domain.Category; import cc.ryanc.halo.model.domain.Post; import cc.ryanc.halo.model.domain.Tag; import cc.ryanc.halo.model.dto.Archive; +import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.enums.PostStatusEnum; import cc.ryanc.halo.model.enums.PostTypeEnum; import cc.ryanc.halo.repository.PostRepository; @@ -464,4 +465,18 @@ public class PostServiceImpl implements PostService { public String buildSiteMap(List posts) { return HaloUtils.getSiteMap(posts); } + + /** + * 缓存阅读数 + * + * @param postId postId + */ + @Override + public void cacheViews(Long postId) { + if (null != HaloConst.POSTS_VIEWS.get(postId)) { + HaloConst.POSTS_VIEWS.put(postId, HaloConst.POSTS_VIEWS.get(postId) + 1); + } else { + HaloConst.POSTS_VIEWS.put(postId, 1L); + } + } } diff --git a/src/main/java/cc/ryanc/halo/task/PostSyncTask.java b/src/main/java/cc/ryanc/halo/task/PostSyncTask.java new file mode 100644 index 000000000..3cb40c3e3 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/task/PostSyncTask.java @@ -0,0 +1,34 @@ +package cc.ryanc.halo.task; + +import cc.ryanc.halo.model.domain.Post; +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.service.PostService; +import cc.ryanc.halo.utils.SpringUtil; +import lombok.extern.slf4j.Slf4j; + +/** + * @author : RYAN0UP + * @date : 2018/12/5 + */ +@Slf4j +public class PostSyncTask { + + /** + * 将缓存的图文浏览数写入数据库 + */ + public void postSync() { + PostService postService = SpringUtil.getBean(PostService.class); + Post post = null; + int count = 0; + for (Long key : HaloConst.POSTS_VIEWS.keySet()) { + post = postService.findByPostId(key).orElse(null); + if (null != post) { + post.setPostViews(post.getPostViews() + HaloConst.POSTS_VIEWS.get(key)); + postService.saveByPost(post); + count++; + } + } + log.info("The number of visits to {} posts has been updated", count); + HaloConst.POSTS_VIEWS.clear(); + } +} diff --git a/src/main/java/cc/ryanc/halo/utils/SpringUtil.java b/src/main/java/cc/ryanc/halo/utils/SpringUtil.java new file mode 100644 index 000000000..213d4dd78 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/utils/SpringUtil.java @@ -0,0 +1,52 @@ +package cc.ryanc.halo.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * @author : RYAN0UP + * @date : 2018/12/5 + */ +@Component +public class SpringUtil implements ApplicationContextAware { + private static ApplicationContext applicationContext; + + /** + * 获取applicationContext + * + * @return ApplicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if (SpringUtil.applicationContext == null) { + SpringUtil.applicationContext = applicationContext; + } + } + + /** + * 通过name获取 Bean. + * + * @param name name + * @return Object + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean + * + * @param clazz clazz + * @param + * @return T + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java index 9225aa2dd..b2501358c 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/admin/BackupController.java @@ -7,7 +7,6 @@ import cc.ryanc.halo.model.dto.HaloConst; import cc.ryanc.halo.model.dto.JsonResult; import cc.ryanc.halo.model.enums.*; import cc.ryanc.halo.service.MailService; -import cc.ryanc.halo.service.OptionsService; import cc.ryanc.halo.service.PostService; import cc.ryanc.halo.utils.HaloUtils; import cc.ryanc.halo.utils.LocaleMessageUtil; @@ -15,15 +14,15 @@ import cn.hutool.core.date.DateUtil; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ZipUtil; -import cn.hutool.cron.CronUtil; -import freemarker.template.Configuration; -import freemarker.template.TemplateModelException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.ResourceUtils; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpSession; import java.io.File; @@ -54,12 +53,6 @@ public class BackupController { @Autowired private LocaleMessageUtil localeMessageUtil; - @Autowired - private OptionsService optionsService; - - @Autowired - private Configuration configuration; - /** * 渲染备份页面 * @@ -197,33 +190,6 @@ public class BackupController { } } - /** - * 备份设置 - * - * @param autoBackup autoBackup - * @return 重定向到/admin/backup - */ - @PostMapping(value = "backupOption") - public String backupOption(@RequestParam("auto_backup") String autoBackup) throws TemplateModelException { - if (StrUtil.equals(autoBackup, TrueFalseEnum.TRUE.getDesc())) { - if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.AUTO_BACKUP.getProp()), TrueFalseEnum.FALSE.getDesc())) { - CronUtil.start(); - log.info("The scheduled task starts successfully!"); - } - optionsService.saveOption("auto_backup", TrueFalseEnum.TRUE.getDesc()); - } else { - if (StrUtil.equals(HaloConst.OPTIONS.get(BlogPropertiesEnum.AUTO_BACKUP.getProp()), TrueFalseEnum.TRUE.getDesc())) { - CronUtil.stop(); - log.info("The scheduled task stops successfully!"); - } - optionsService.saveOption("auto_backup", TrueFalseEnum.FALSE.getDesc()); - } - configuration.setSharedVariable("options", optionsService.findAllOptions()); - HaloConst.OPTIONS.clear(); - HaloConst.OPTIONS = optionsService.findAllOptions(); - return "redirect:/admin/backup"; - } - /** * 将备份发送到邮箱 * diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java index 8af254e9b..3fd7c4b6a 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontArchiveController.java @@ -78,7 +78,7 @@ public class FrontArchiveController extends BaseController { if (null == posts) { return this.renderNotFound(); } - model.addAttribute("is_archives",true); + model.addAttribute("is_archives", true); model.addAttribute("posts", posts); return this.render("archives"); } @@ -99,7 +99,7 @@ public class FrontArchiveController extends BaseController { if (null == posts) { return this.renderNotFound(); } - model.addAttribute("is_archives",true); + model.addAttribute("is_archives", true); model.addAttribute("posts", posts); return this.render("archives"); } @@ -113,7 +113,7 @@ public class FrontArchiveController extends BaseController { */ @GetMapping(value = "{postUrl}") public String getPost(@PathVariable String postUrl, - @RequestParam(value = "cp",defaultValue = "1") Integer cp, + @RequestParam(value = "cp", defaultValue = "1") Integer cp, Model model) { Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_POST.getDesc()); if (null == post || !post.getPostStatus().equals(PostStatusEnum.PUBLISHED.getCode())) { @@ -153,15 +153,15 @@ public class FrontArchiveController extends BaseController { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp())); } //评论分页 - ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size); + ListPage commentsPage = new ListPage(CommentUtil.getComments(comments), cp, size); int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3); - model.addAttribute("is_post",true); + model.addAttribute("is_post", true); model.addAttribute("post", post); model.addAttribute("comments", commentsPage); model.addAttribute("commentsCount", comments.size()); model.addAttribute("rainbow", rainbow); model.addAttribute("tagWords", CollUtil.join(tagWords, ",")); - postService.updatePostView(post); + postService.cacheViews(post.getPostId()); return this.render("post"); } } diff --git a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java index 9b77409ac..b5af803ef 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/front/FrontPageController.java @@ -76,7 +76,7 @@ public class FrontPageController extends BaseController { */ @GetMapping(value = "/p/{postUrl}") public String getPage(@PathVariable(value = "postUrl") String postUrl, - @RequestParam(value = "cp",defaultValue = "1") Integer cp, + @RequestParam(value = "cp", defaultValue = "1") Integer cp, Model model) { Post post = postService.findByPostUrl(postUrl, PostTypeEnum.POST_TYPE_PAGE.getDesc()); if (null == post) { @@ -95,17 +95,17 @@ public class FrontPageController extends BaseController { size = Integer.parseInt(HaloConst.OPTIONS.get(BlogPropertiesEnum.INDEX_COMMENTS.getProp())); } //评论分页 - ListPage commentsPage = new ListPage(CommentUtil.getComments(comments),cp, size); + ListPage commentsPage = new ListPage(CommentUtil.getComments(comments), cp, size); int[] rainbow = PageUtil.rainbow(cp, commentsPage.getTotalPage(), 3); - model.addAttribute("is_page",true); + model.addAttribute("is_page", true); model.addAttribute("post", post); model.addAttribute("comments", commentsPage); model.addAttribute("commentsCount", comments.size()); model.addAttribute("rainbow", rainbow); - postService.updatePostView(post); + postService.cacheViews(post.getPostId()); //如果设置了自定义模板,则渲染自定义模板 - if(StrUtil.isNotEmpty(post.getCustomTpl())){ + if (StrUtil.isNotEmpty(post.getCustomTpl())) { return this.render(post.getCustomTpl()); } return this.render("page"); diff --git a/src/main/resources/config/cron.setting b/src/main/resources/config/cron.setting index 87e3c922b..4525521c8 100644 --- a/src/main/resources/config/cron.setting +++ b/src/main/resources/config/cron.setting @@ -1,4 +1 @@ -[cc.ryanc.halo.web.controller.admin] -BackupController.backupResources = 0 0 1 * * ? -BackupController.backupDatabase = 0 0 2 * * ? -BackupController.backupPosts = 0 0 3 * * ? +cc.ryanc.halo.task.PostSyncTask.postSync = 0 0 * * * ? \ No newline at end of file diff --git a/src/main/resources/templates/admin/admin_backup.ftl b/src/main/resources/templates/admin/admin_backup.ftl index 55527a91d..42c477f52 100644 --- a/src/main/resources/templates/admin/admin_backup.ftl +++ b/src/main/resources/templates/admin/admin_backup.ftl @@ -7,9 +7,6 @@

<@spring.message code='admin.backup.title' />

- - <@spring.message code='admin.backup.text.setting' /> -
-