diff --git a/src/main/java/io/github/yubincloud/fairywiki/job/DocJob.java b/src/main/java/io/github/yubincloud/fairywiki/job/DocJob.java new file mode 100644 index 0000000000000000000000000000000000000000..dd17ae136af2a52e7b4173e5b47f10c0fe43dddc --- /dev/null +++ b/src/main/java/io/github/yubincloud/fairywiki/job/DocJob.java @@ -0,0 +1,28 @@ +package io.github.yubincloud.fairywiki.job; + +import io.github.yubincloud.fairywiki.service.DocService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class DocJob { + + private static final Logger LOG = LoggerFactory.getLogger(DocJob.class); + + @Resource + private DocService docService; + + /** + * 每30秒更新电子书信息 + */ + @Scheduled(cron = "5/30 * * * * ?") + public void cron() { + System.out.println("Starting a doc job"); + docService.updateEbookFooter(); + } + +} diff --git a/src/main/java/io/github/yubincloud/fairywiki/job/ScheduleJobDemo.java b/src/main/java/io/github/yubincloud/fairywiki/job/ScheduleJobDemo.java index 881effd400909e624461b2343770872194e14c02..27e62bc4847ecd930397e467c3a05c8ead8b33e0 100644 --- a/src/main/java/io/github/yubincloud/fairywiki/job/ScheduleJobDemo.java +++ b/src/main/java/io/github/yubincloud/fairywiki/job/ScheduleJobDemo.java @@ -1,39 +1,39 @@ -package io.github.yubincloud.fairywiki.job; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; - -import java.text.SimpleDateFormat; -import java.util.Date; - - -@Component -public class ScheduleJobDemo { - - private static final Logger LOG = LoggerFactory.getLogger(ScheduleJobDemo.class); - - /** - * 固定时间间隔,fixedRate单位毫秒 - */ - @Scheduled(fixedRate = 1000) - public void simple() throws InterruptedException { - SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); - String dateString = formatter.format(new Date()); - Thread.sleep(2000); - LOG.info("每隔5秒钟执行一次: {}", dateString); - } - - /** - * 自定义cron表达式跑批 - * 只有等上一次执行完成,下一次才会在下一个时间点执行,错过就错过 - */ - @Scheduled(cron = "*/1 * * * * ?") - public void cron() throws InterruptedException { - SimpleDateFormat formatter = new SimpleDateFormat("mm:ss SSS"); - String dateString = formatter.format(new Date()); - Thread.sleep(1500); - LOG.info("每隔1秒钟执行一次: {}", dateString); - } -} +//package io.github.yubincloud.fairywiki.job; +// +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.scheduling.annotation.Scheduled; +//import org.springframework.stereotype.Component; +// +//import java.text.SimpleDateFormat; +//import java.util.Date; +// +// +//@Component +//public class ScheduleJobDemo { +// +// private static final Logger LOG = LoggerFactory.getLogger(ScheduleJobDemo.class); +// +// /** +// * 固定时间间隔,fixedRate单位毫秒 +// */ +// @Scheduled(fixedRate = 1000) +// public void simple() throws InterruptedException { +// SimpleDateFormat formatter = new SimpleDateFormat("mm:ss"); +// String dateString = formatter.format(new Date()); +// Thread.sleep(2000); +// LOG.info("每隔5秒钟执行一次: {}", dateString); +// } +// +// /** +// * 自定义cron表达式跑批 +// * 只有等上一次执行完成,下一次才会在下一个时间点执行,错过就错过 +// */ +// @Scheduled(cron = "*/1 * * * * ?") +// public void cron() throws InterruptedException { +// SimpleDateFormat formatter = new SimpleDateFormat("mm:ss SSS"); +// String dateString = formatter.format(new Date()); +// Thread.sleep(1500); +// LOG.info("每隔1秒钟执行一次: {}", dateString); +// } +//} diff --git a/src/main/java/io/github/yubincloud/fairywiki/mapper/DocMapperCustom.java b/src/main/java/io/github/yubincloud/fairywiki/mapper/DocMapperCustom.java index 6800878b229cee30d7a04a764a4c794bb688ec2f..dd4d5f81cb500271155faa60db6e99b10d2fffae 100644 --- a/src/main/java/io/github/yubincloud/fairywiki/mapper/DocMapperCustom.java +++ b/src/main/java/io/github/yubincloud/fairywiki/mapper/DocMapperCustom.java @@ -15,4 +15,9 @@ public interface DocMapperCustom { * @param docId 文档的 id */ void increaseVoteCount(@Param("id") Long docId); + + /** + * 更新所有 Ebook 的阅读量、点赞量信息 + */ + void updateEbookFooter(); } diff --git a/src/main/java/io/github/yubincloud/fairywiki/service/DocService.java b/src/main/java/io/github/yubincloud/fairywiki/service/DocService.java index fb917b58ea3b7f0868fa825a99b378adc37babe6..351c7fc31a1b41fb970f90fbf88bb72d81b85847 100644 --- a/src/main/java/io/github/yubincloud/fairywiki/service/DocService.java +++ b/src/main/java/io/github/yubincloud/fairywiki/service/DocService.java @@ -18,10 +18,10 @@ import io.github.yubincloud.fairywiki.utils.CopyUtil; import io.github.yubincloud.fairywiki.utils.RedisUtil; import io.github.yubincloud.fairywiki.utils.RequestContext; import io.github.yubincloud.fairywiki.utils.SnowFlake; +import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import org.springframework.util.ObjectUtils; import javax.annotation.Resource; import java.util.List; @@ -153,4 +153,11 @@ public class DocService { private String constructIpKeyInRedis(Long docId, String ip) { return "ODC_VOTE_" + docId + "_" + ip; } + + /** + * 更新所有 Ebook 的阅读量、点赞量信息 + */ + public void updateEbookFooter() { + docMapperCustom.updateEbookFooter(); + } } diff --git a/src/main/resources/mapper/DocMapperCustom.xml b/src/main/resources/mapper/DocMapperCustom.xml index 792fe1981fc81e4ea0e97d7eec57ccb09ad13f3a..15b3ac8fcde88d768ee5e6fdbe6f9da857b1435e 100644 --- a/src/main/resources/mapper/DocMapperCustom.xml +++ b/src/main/resources/mapper/DocMapperCustom.xml @@ -14,4 +14,13 @@ WHERE id = #{id} + + UPDATE ebook t1, ( + SELECT ebook_id, count(1) doc_count, sum(view_count) view_count, sum(vote_count) vote_count + FROM doc + GROUP BY ebook_id) t2 + SET t1.doc_count = t2.doc_count, t1.view_count = t2.view_count, t1.vote_count = t2.vote_count + WHERE t1.id = t2.ebook_id + +