给大家聊一聊云收藏从 Spring Boot 1.0 升级到 2.0 所踩的坑
先给大家晒一下云收藏的几个数据, 作为一个 Spring Boot 的开源项目 (https://github.com/cloudfavorites/favorites-web) 目前在 Github 上面已经有 1600 多个 Star, 如果按照 SpringBoot 标签进行筛选的话也可以排到第五位.
当云收藏 1.0 开发完成之后, 同步将云收藏部署到了服务器上, 申请了一个域名 www.favorites.ren http://favorites.ren/ 方便大家使用, 到目前为止: 网站的注册用户 4000 多人, 共计收藏文章 100000 多条, 在百度上搜索: 云收藏, 排在第一的就是云收藏的官网. 2 年多的时间这个数据其实也并不是很耀眼, 但是作为一个学习 Spring Boot 的开源软件来讲, 已经不错了.
云收藏的部署之路也挺曲折, 刚开始的时候部署在我以前公司的服务器上, 后来离职的时候在阿里云买了个 1 核 1G 的云服务器, 因为安装了 Mysql,Redis, 还有其它小软件导致服务器非常卡, 那段时间访问云收藏的时候需要等待 2-3 秒才会有响应.
终于有一天自己也不能忍了, 花钱把服务器升级到 2 核 2G, 访问速度虽有所提升但还是很不理想, 那段时间工作很忙也没时间优化. 网站的 Bug 也是一片, 有时候还会突然中断服务几个小时, 流失了一大批用户, 甚至有人在 Github 上面留言说: 看来微笑哥已经放弃云收藏了, 我看了之后只能苦笑.
到了今年 Spring Boot 2.0 发布的时候, 我就计划着把云收藏全面升级到 2.0, 顺便做一些优化让访问速度快一点. 但一拖就是 2 个月, 终于在前几个周末抽出了一点时间, 将云收藏升级到了 Spring Boot 2.0 同时修复了一批显而易见的 Bug , 使用 Nginx 将静态图片等资源做了代理, 当这些工作完全做完的时候, 云收藏的访问速度明显得到了提升, 大家可以访问 www.favorites.ren http://favorites.ren/ 体验一下.
- // 1.0
- import org.springframework.boot.web.support.SpringBootServletInitializer;
- // 2.0
- import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
- @SpringBootApplication
- public class UserManageApplication extends SpringBootServletInitializer {
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
- return application.sources(UserManageApplication.class);
- }
- public static void main(String[] args) throws Exception {
- SpringApplication.run(UserManageApplication.class, args);
- }
- }
- import org.apache.log4j.Logger;
- protected Logger logger = Logger.getLogger(this.getClass());
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- protected Logger logger = LoggerFactory.getLogger(this.getClass());
- //delete 改为 void 类型
- void deleteById(Long id);
- @Query("select t from Tag t where t.tagId = :tagId")
- Tag getByTagId(@Param("tagId") long tagId);
- ...
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '299' for key 'PRIMARY'
- @Id
- @GeneratedValue(strategy= GenerationType.IDENTITY)
- private long id;
- <dependency>
- <groupId>nz.net.ultraq.thymeleaf</groupId>
- <artifactId>thymeleaf-layout-dialect</artifactId>
- </dependency>
- public static PageRequest of(int page, int size, Sort sort) {
- return new PageRequest(page, size, sort);
- }
- public interface CollectView{
- Long getId();
- Long getUserId();
- String getProfilePicture();
- String getTitle();
- }
来源: https://www.cnblogs.com/ityouknow/p/9131624.html