✔✖❄❀☆☂✡♥❤✴⭐❔❓❕❗✅❌❤✨✨⭐
comment
discuss_post
login_ticket:后期把login_ticket完全存到了Redis里。LoginTicket这条线,从数据库到Mapper到xml都可以删除掉。service不能删除,因为存到Redis里也需要service。
message
user
分布式定时任务Spring Quartz的11张表
什么都没标记:还没看
-
:目录
✅:我看完了。打前面。
:测试,可删除,看完了。打前面。
⭐:重点。打后面。
❎:代码有问题。打后面。
:看不懂,不熟。打后面。
✅测试项目:7-1 springsecuritydemo-实现
resources
application.properties
application-develop.properties
application-produce.properties
✅logback-spring.xml
✅logback-spring-develop.xml:注释详细。视频课1.38。
✅logback-spring-produce.xml
✅sensitive-words.txt:过滤敏感词的敏感词文件。
community
✅CommunityApplication
✅CommunityServletInitializer⭐:项目部署到服务器的tomcat时,tomcat访问该方法作为入口来运行该项目。视频课8.3。
actuator
✅DatabaseEndpoint⭐:视频课8.2。
annotation
LoginRequired:结合LoginRequiredInterceptor
测试自定义注解。该注解注解在方法上,被注解的方法在访问时需要登录,如果没有登录,则会重定向到登录页面。视频课2.41。
aspect
AlphaAspect:AOP,视频课3.33
✅ServiceLogAspect⭐:AOP,每次访问service方法前都要记录一个日志,视频课3.33。
config
AlphaConfig:视频课1.6。
✅EsConfig⭐:Elasticsearch
✅KaptchaConfig⭐:Kaptcha
✅QuartzConfig⭐:前半截和QuartzConfig、QuartzTests、application-develop.properties一起测试Spring Quartz(分布式定时任务),视频课7.13。后半截配置Quartz,把Quartz用在项目里,每5分钟计算一次有发帖、评论、点赞、加精的帖子的分数,视频课7.16。
✅RedisConfig⭐:Redis
✅SecurityConfig⭐:SpringSecurity的配置类,这里只有授权。认证在LoginTicketInterceptor的preHandle()方法和LoginController类的logout()方法中。视频课7.3。
✅ThreadPoolConfig⭐:和ThreadPoolTests和application-develop.properties中的两块配置和AlphaService中最下面的两个方法一起测试Spring的两种线程池和它们的简化版,视频课7.13。不加这个类,Spring可执行定时任务的线程池ThreadPoolTaskScheduler就无法注入。ThreadPoolTaskScheduler在项目的EventConsumer类中用到了,所以ThreadPoolConfig不可删。
✅WebMvcConfig⭐:配置每个拦截器(Interceptor)拦截哪些内容。
✅WkConfig⭐:不是为了配置,而是为了在程序一开始运行时,就创建WK图片目录。软件wkhtmltopdf,用于把网页生成长图。视频课7.19。
controller
AlphaController:开头一点点在视频课1.6。中间大部分在视频课1.14。底下一部分在视频课3.6。
✅CommentController⭐:重点:Kafka的生产消费事件:TOPIC_COMMENT、TOPIC_PUBLISH
✅DataController
✅DiscussPostController⭐:重点:1、帖子详情的Controller方法比较复杂。2、置顶加精删除,用到了Kafka的生产消费事件:TOPIC_PUBLISH、TOPIC_DELETE。
✅FollowController
✅HomeController
✅LikeController:1、触发Kafka的TOPIC_LIKE事件。2、计算帖子分数。
✅LoginController⭐:重点:1、kaptcha。2、登录和退出流程复杂。
✅MessageController
✅SearchController:搜索功能的Controller
✅ShareController⭐:wkhtmltopdf和Kafka异步把网页生成长图。视频课7.19。
✅UserController⭐:"/setting"和"/header/url"图片上传七牛云,视频课7.23。
注解@LoginRequired
测试自定义注解。该注解注解在方法上,被注解的方法在访问时需要登录,如果没有登录,则会重定向到登录页面。视频课2.41。dao
AlphaDao:视频课1.6。
AlphaDaoHibernateImpl:视频课1.6。
AlphaDaoMyBatisImpl:视频课1.6。
✅CommentMapper
✅DiscussPostMapper
LoginTicketMapper:后期把LoginTicket存到了Redis里,不需要这个Mapper。
✅MessageMapper
✅UserMapper
entity
✅Comment
✅DiscussPost⭐:ElasticSearch
✅Event⭐:连续set小技巧,Kafka
✅LoginTicket:登录凭证不保存到数据库中,而是保存到redis里,并且这些登录凭证在退出后并且到一定时间后会被删除。
✅Message
✅Page
✅User
event
✅EventConsumer⭐:后半截TOPIC_SHARE,图片上传七牛云,视频课7.23。
✅EventProducer⭐:Kafka
quartz
AlphaJob⭐:和QuartzConfig、QuartzTests、application-develop.properties一起测试Spring Quartz(分布式定时任务)。视频课7.13。
✅PostScoreRefreshJob⭐:记录Quartz要做的一个工作,每5分钟计算一次有发帖、评论、点赞、加精的帖子的分数,视频课7.16。
✅WKImageDeleteJob:课后练习,第七章第九节,7.26。启动定时任务(每4分钟执行一次),删除1分钟之前由分享功能所创建的临时文件。
service
AlphaService⭐:开头一部分测试注解@PostConstruct、@PreDestroy,视频课1.6。中间大部分和TransactionTests一起测试事务。视频课3.13。结尾一部分和ThreadPoolConfig和ThreadPoolTests和和application-develop.properties中的两块配置一起测试Spring两种线程池的简化版,视频课7.13。
✅CommentService⭐:里面有事务@Transactional
✅DataService:重点⭐:1、Redis高级数据类型:HyperLogLog、Bitmap。
✅DiscussPostService⭐:Caffeine缓存,缓存点击首页最热时的15页帖子,缓存点击首页时的帖子总数量,这个缓存3分钟刷新一次,视频课7.27。
✅ElasticsearchService⭐:Elasticsearch
✅FollowService
✅LikeService
✅MessageService
✅UserService
util
✅CommunityConstant⭐:常量类
✅CommunityUtil⭐:有生成UUID、MD5加密、得到JSONString。
✅CookieUtil:从HttpServletRequest中传来的所有cookie中,找出名字为name的cookie。
✅HostHolder:重点:1、ThreadLocal类
✅MailClient
✅RedisKeyUtil⭐:可以看这个知道Redis用在了哪些地方。
✅SensitiveFilter⭐:Trie树实现敏感词过滤。
1、该文章打头的类
2、标注"//废弃"的方法。ShareController、UserController里有
3、UserController类中的@LoginRequired注解删掉。因为这个注解是测试用的。
4、WebMvcConfig中AlphaInterceptor和LoginRequiredInterceptor要删掉。
4、QuartzConfig的上面两个@Bean被注释掉的方法是测试方法,要删掉。
6、application.properties中“community.path.upload=d:/work/data/upload”,和其他用到这个的@Value
7、UserController中删除上面三个@Value。ShareController也在删除废弃的方法后删除不用的@Value
8、application.properties中
# TaskExecutionProperties
spring.task.execution.pool.core-size=5
spring.task.execution.pool.max-size=15
spring.task.execution.pool.queue-capacity=100
是只有测试使用的,可以删除
数据库的CRUD
难点:
1、message-mapper.xml里的sql有难度。
拦截器:MessageInterceptor
Message
MessageMapper
message-mapper.xml
MessageService
MessageController
letter.html
letter-detail.html
notice.html
notice-detail.html
letter.js
UserService中重点:
1、UserService中用到了发邮件,MailClient工具类。
2、UserService里用Redis缓存User。
3、LoginTicket完全存放到了Redis里。
4、UserService里有SpringSecurity的getAuthorities方法。
UserController中重点:
1、上传图片到七牛云
工具类:MailClient
User
UserMapper
user-mapper.xml
UserService
UserController
HomeController
profile.html
profile.js
登录、退出、判断是否登录的流程
LoginTicketInterceptor中重点:
1、判断是否登录的流程难理解
2、SpringSecurity
HostHolder中重点:
1、ThreadLocal类
LoginController中重点:
1、kaptcha
2、登录和退出流程复杂
重要类:LoginTicketInterceptor,HostHolder、CookieUtil
LoginTicket
UserService
LoginController
login.html
DiscussPostService中重点:
难点:
1、elasticSearch
2、SensitiveFilter,Trie树过滤敏感词
3、Caffeine缓存。最热的帖子(orderMode == 1),才用Caffeine缓存
DiscussPostController中重点:
1、帖子详情的Controller方法比较复杂
2、置顶加精删除,用到了Kafka的生产消费事件:TOPIC_PUBLISH、TOPIC_DELETE。
工具类:SensitiveFilter
DiscussPost
DiscussPostMapper
discusspost-mapper.xml
DiscussPostService
DiscussPostController
CommentService中重点:
1、事务@Transactional
CommentController中重点:
1、Kafka的生产消费事件:TOPIC_COMMENT、TOPIC_PUBLISH
Comment
CommentMapper
comment-mapper.xml
CommentService
CommentController
Redis的CRUD
配置类:RedisConfig
工具类:RedisKeyUtil
DataService中重点:
1、Redis高级数据类型:HyperLogLog、Bitmap。
测试类:RedisTests
DataService
拦截器:DataInterceptor
DataController
data.html
// 某个实体的赞
// value是点赞的人userId的set集合
// like:entity:entityType:entityId -> set(userId)
public static String getEntityLikeKey(int entityType, int entityId) {
return PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityId;
}
// 某个用户的赞
// key中的userId是被点赞的帖子/评论/回复的主人的userId,value是赞的数量
// like:user:userId -> int
public static String getUserLikeKey(int userId) {
return PREFIX_USER_LIKE + SPLIT + userId;
}
LikeService
LikeController
discuss-detail.html
discuss.js
FollowService
FollowController
profile.html
followee.html
follower.html
//用户 aaa 评论了你的帖子/回复, 点击查看 ! 链接:帖子详情页面
//用户 aaa 点赞了你的帖子/回复, 点击查看 ! 链接:帖子详情页面
//用户 lhh 关注了你, 点击查看 ! 链接:lhh的个人信息页面
@KafkaListener(topics = {TOPIC_COMMENT, TOPIC_LIKE, TOPIC_FOLLOW})
Event
EventProducer
EventConsumer
配置类:EsConfig
DiscussPostRepository
ElasticsearchService
KaptchaConfig
LoginController
login.html
第二章第五节,2.26。
开发忘记密码的功能:
1、点击登录页面上的“忘记密码”链接,打开忘记密码页面。
2、在表单中输入注册的邮箱,点击获取验证码按钮,服务器为该邮箱发送一份验证码。
3、在表单中填写收到的验证码及新密码,点击重置密码,服务器对密码进行修改。
修改的文件:
UserService
LoginController
forget.js
/site/forget.html
/mail/forget.html
login.html
细节:
用session来存储正确的验证码。
第二章第七节,2.40。
开发修改密码功能:
1、在账号设置页面,填写原密码以及新密码,点击保存时将数据提交给服务器。
2、服务器检查原密码是否正确,若正确则将密码修改为新密码,并重定向到退出功能,强制用户重新登录。若错误则返回到账号设置页面,给与相应提示。
修改的文件:
UserService
UserController
setting.html
第三章第八节,3.30。
开发删除私信功能,即点击某条私信的删除按钮时,将其状态设置为删除态。
存在问题:这个功能相当于撤销,因为无论那一边删除了哪条私信,那么两边的人都看不到这条私信了。如果要改为只在一边删除,那么就要修改message表了。
修改的文件:
MessageController
MessageService
letter.js
letter-detail.html
ps:
同一条线路还可以删除通知。只需要在notice-detail.html里加一句
,其他都不用改,直接复用删除私信的这条线就好,
第四章第六节。4.21,4.22。
开发我的帖子功能,即在个人主页上,显示当前用户曾经发布过的帖子。
开发我的回复功能,即在个人主页上,显示当前用户曾经为帖子发布过的评论。
修改的文件:
CommentMapper
comment-mapper.xml
CommentService
UserController
profile.html
my-post.html
my-reply.html
第七章第九节。7.26。
启动定时任务(每4分钟执行一次),删除1分钟之前由分享功能所创建的临时文件。
修改的文件:
WKImageDeleteJob
QuartzConfig