项目背景:
蹭着暑假时间,系统把学过的知识运用出来,以前做了许多笔记和博客都比较零散,所以想出了做一个个人博客来存放我的笔记和博客。前端采用的是github上的作者oneStar 加以修改,大家也可以多关注原作的作品,后端自己采用学过的知识从零开始搭建敲了大概半个月时间把这套博客网站攻下,技术栈数据库从0到上线包括有springboot,swagger2,thymeleaf,mybatis-plus,redis,mysql,JavaMailSender,pagehelper等技术。详情请参考源码,我
目录
把项目地址放在最后。
项目演示:
地址:https://www.purui.online
首页:
博客内容:
分类:
流年记:
音乐盒:
留言板:
友人帐:
照片墙:
资源库:
关于我:
StringRedisTemplate的使用:
这里我采用业务注入service层的原理,代码复用便于管理,而真正调用业务层方法的时候直接调用redisMethod中的方法。
package com.rui.myblog.redisMethod.impl;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
import com.rui.myblog.dto.BlogAllDto;
import com.rui.myblog.dto.NewRecommenededBlogDto;
import com.rui.myblog.pojo.Friend;
import com.rui.myblog.redisMethod.BlogRemplate;
import com.rui.myblog.service.IBlogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author 蒲锐
* @CreateTme 2022/9/24 15:58
* Version1.0.0
*/
@Service
public class BlogRemplateImpl implements BlogRemplate {
@Autowired
private IBlogService blogService;
@Autowired
private StringRedisTemplate stringRedisTemplate;
public static final String BLOGALLDTO_KEY = "BLOGALLDTO_KEY";
public static final String NEWRECOMMENEDEDBLOGDTO_KEY = "NEWRECOMMENEDEDBLOGDTO_KEY";
@Override
public List<BlogAllDto> blogAllDtoList() {
String str = stringRedisTemplate.opsForValue().get(BLOGALLDTO_KEY);
List<BlogAllDto> allBlog;
if (StrUtil.isBlank(str)){
allBlog = blogService.getAllBlog();
stringRedisTemplate.opsForValue().set(BLOGALLDTO_KEY, JSONUtil.toJsonStr(allBlog));
}else{
allBlog = JSONObject.parseArray(str, BlogAllDto.class);
}
return allBlog;
}
@Override
public List<NewRecommenededBlogDto> newRecommenededBlogDto() {
String str = stringRedisTemplate.opsForValue().get(NEWRECOMMENEDEDBLOGDTO_KEY);
List<NewRecommenededBlogDto> recommendedBlog;
if (StrUtil.isBlank(str)){
recommendedBlog = blogService.getRecommendedBlog();
stringRedisTemplate.opsForValue().set(NEWRECOMMENEDEDBLOGDTO_KEY, JSONUtil.toJsonStr(recommendedBlog));
}else{
recommendedBlog = JSONObject.parseArray(str, NewRecommenededBlogDto.class);
}
return recommendedBlog;
}
@Override
public void BlogDelete() {
stringRedisTemplate.delete(BLOGALLDTO_KEY);
stringRedisTemplate.delete(NEWRECOMMENEDEDBLOGDTO_KEY);
}
}
图片上传:
这里我采用了过滤器的方式,避免服务存图片时,再次编译后图片资源的丢失,也避免用流的方式存入数据库造成数据库的压力:
配置文件:
#windows
upload=E:/javaproject/javaee/myblog/upload/
#linux
upload=/home/files/
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Value("${upload}")
private String files;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file:///"+files);
}
}
java发邮件功能
配置文件,记住这里的密码是要在邮箱中开启POP3/SMTP/IMAP服务获取秘钥
#####163邮箱########
spring.mail.host=smtp.163.com
spring.mail.username=XXX
#163邮箱密码
spring.mail.password=XXX
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
// 发送邮件
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setSubject("朴朴爱吃肉肉客栈评论回复"); //主题
simpleMailMessage.setText(comtent); //内容
simpleMailMessage.setTo(parentEmail); //接收者的邮箱
simpleMailMessage.setFrom("purui6662@163.com");//发送者邮箱
javaMailSender.send(simpleMailMessage);
我只介绍这几个比较突出的功能,详情请关注我的博客或在我个github中获取源码;
博客:首页-朴朴爱吃肉肉客栈
我的github:https://github.com/857092878/myblog