# lqsblog-backend-java-springboot

lqsblog-backend-java-springboot (opens new window) GitHub stars (opens new window) 是一个基于微服务思想的API后端服务,它基于 spring-boot (opens new window)实现(maven + springboot + mybatis + mybatis plus + shiro + jwt(+ 自动刷新) + restful)。

# 功能

# 一、api 模块 (admin、pc)
- 登录 / 注销 (shiro + jwt 验证,自动刷新jwt)
- 首页 / 统计
- 随笔
- 作品
- 专题
- 左邻右舍
- 设置
  - 关于我
  - 标签
  - 账号
  - 角色
  - 后台菜单
  - 后台API
  - 站点配置
# 二、webs 模块,在lqsblog-webs模块中自己自定义扩展
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 技术选型

  • 核心框架:Sring boot + Spring Framework
  • 安全框架:Apache Shiro
  • 持久层框架: MyBatis + MyBatis-Plus
  • 会话管理: JWT
  • 日志管理:SLF4J
  • JSON转换: Jackson FastJson
  • JAVA库:Lombok
  • 工具:Maven
  • api风格:restful
  • 模板引擎:thymeleaf

TIP

注:idea 必须安装 Lombok 插件,如果不知道怎么安装,安装方法,自己可以百度或谷歌。

# 基础环境

  • JDK11 +
  • MySQL5.7 +
  • maven3.6 +
  • Idea 安装 lombok 设置动态编译

# 目录结构

本项目已经为你生成了一个完整的开发框架,下面是整个项目的目录结构。

├── lqsblog-api                            # api服务模块
│   │── src.main.java
│   │   │── cc.liqingsong.api.admin        # admin后台api接口
│   │   │── cc.liqingsong.api.pc           # pc前台api接口
│   │   └── ApiApplication.java            # SpingBoot 运行程序
│   └── src.main.resources
│       └── application.yml                # SpingBoot 配置文件
├── lqsblog-api-common                     # api服务公共
├── lqsblog-common                         # 项目公共
├── lqsblog-database                       # 项目数据库层模块(实体类、DTO、VO)
├── lqsblog-service                        # 项目服务层模块
├── lqsblog-webs                           # jsp Web PC前台
│   │── src.main.java
│   │   │── cc.liqingsong.api.webs         # pc前台 实现模板数据输出
│   │   └── WebsApplication.java           # SpingBoot 运行程序
│   └── src.main.resources
│       │── templates                      # pc前台(thymeleaf)模板
│       └── application.yml                # SpingBoot 配置文件
├── lqsblog-webs-common                    # jsp Web 公共
└── pom.xml                                # maven 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

TIP

  • SpingBoot 运行程序有两份,分别位于 lqsblog-api模块下的ApiApplication.javalqsblog-webs模块下的WebsApplication.java,对应的分别是api服务Web PC前台
  • 本项目只做了API开发,与其他前端模块前端前台前端后台进行配合应用,如果你需要java版的PC端你可以自行在lqsblog-webs模块扩展开发。

# 配置

本项目基于springboot框架开发,主体配置参数说明请参考SpringBoot官方文档 (opens new window),以下只做扩展内容的说明:

# lqsblog-api 下  application.yml
# spring 配置
spring:
  profiles:
    # 激活哪个环境配置
    active: local
  # 应用配置
  application:
    name: lqsblog-api
  # 数据库连接池
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/lqsblog?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root
  mvc:
    # 启用 Not Found
    throw-exception-if-no-handler-found: true
    # 静态资源访问路径,这样可以解决获取不到 NoHandlerFoundException,并此配置也用到自定义资源映射
    static-path-pattern: /statics/**
  servlet:
    # MULTIPART (MultipartProperties)
    multipart:
      # 开启 multipart 上传功能
      enabled: true
      # 单个文件的最大值
      max-file-size: 1MB
      # 上传文件总的最大值(最大请求大小)
      max-request-size: 10MB
# mybatis-plus 配置
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      table-prefix: lqs_
# server 配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8088
  servlet:
    # 应用的访问路径
    context-path: /
# 自定义博客站点配置
lqsblog:
  # 网址,上传图片返回地址有用到
  weburl: http://127.0.0.1:8088
  # 跨域配置
  access:
    # 允许跨域网址 多个,分割
    origins: http://127.0.0.1:8181,http://127.0.0.1:3000
  # jwt 配置
  jwt:
    config:
      # 签名私钥
      key: lqsblog
      # 签名失效时间 - 毫秒 1800000(0.5小时)
      ttl: 1800000
      # 距离签名失效时间多少内可以重置签名 - 毫秒 900000(0.25小时[15分钟])
      restttl: 900000
    header:
      # Header头 Token 名称
      tokenkey: lqsblog-token
  # 上传文件 配置
  file:
    # 文件上传目录绑定的自定义网址,可为空(注意如果填写必须 / 结尾),如下格式:
    # upload-weburl: http://127.0.0.1:3001/
    # 默认为空,则上传文件目录的网址为:自定义映射的静态资源网址(${lqsblog.weburl} + ${spring.mvc.static-path-pattern}})
    # 参考: cc.liqingsong.api.common.config.MvcConfig.java; cc.liqingsong.common.utils.Upload.java;
    upload-weburl:
    # 文件上传的目录(注意必须 / 结尾) 绝对地址(注意Linux和Windows上的目录结构不同)
    upload-dir: E:/uploads/
    # 允许图片上传的类型
    img-type:
      - image/png
      - image/gif
      - image/jpg
      - image/jpeg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

TIP

配置文件中 lqsblog 参数下的配置为自定义配置,其他配置请参照 springboot官方文档 (opens new window)。 这里有以下几点需要注意:

  • 1、 spring.mvc.static-path-pattern 必须配置。
  • 2、 针对上面文件内容,lqsblog.file.upload-weburllqsblog.weburl,必须配置一个;如果两者都配置则 lqsblog.file.upload-weburl 优先级高。
  • 3、 lqsblog-api 模块下的 admin api接口会话管理基于 JWT,所以 lqsblog.jwt 必须配置,并且失效时间不要配置太大,因为系统会自动刷新jwt(只要用户是一直后台操作),当然也不要配置太小jwt容易过期。
  • 4、.gitignore 过滤了application-*.yml,所以开发时application-*.yml命名规则的文件不会提交到git,方便开发。
  • 5、spring.profiles.active 激活环境配置是local,也就是说 application-local.yml 级别比 application.yml 高。

# 本地开发

# 克隆项目
git clone https://github.com/lqsong/lqsblog-backend-java-springboot.git

# 下载sql,导入mysql 数据库
https://github.com/lqsong/lqsblog/blob/master/database/lqsblog-backend-java-springboot.sql

# 配置lqsblog-api 下  application.yml 数据库、端口、网址等参数
# idea 导入 运行程序,进行开发
run ApiApplication
1
2
3
4
5
6
7
8
9

TIP

注:数据库后台默认用户名、密码分别是:admin / 123456

# 打包与部署

# 打包

当项目开发完毕,打包项目:

# cd 到项目根目录下,然后运行
mvn clean package
1
2

然后每个模块的target下都会生产一个jar包。

# 部署

这里以lqsblog-api包部署为例:对于部署来讲,你需要以下几步:

# 1、把 lqsblog-api-1.0-SNAPSHOT.jarapplication-local.yml 上传到你的服务器中,放在同一目录,可以修改 application-local.yml 的配置,比如数据库链接、站点端口、网址、跨域等。

# 自定义博客站点配置
lqsblog:
  # 网址,上传图片返回地址有用到
  weburl: http://127.0.0.1:8088
  # 跨域配置
  access:
    # 允许跨域网址 多个,分割
    origins: http://127.0.0.1:8181,http://127.0.0.1:3000
  # jwt 配置
  jwt:
    config:
      # 签名私钥
      key: lqsblog
      # 签名失效时间 - 毫秒 1800000(0.5小时)
      ttl: 1800000
      # 距离签名失效时间多少内可以重置签名 - 毫秒 900000(0.25小时[15分钟])
      restttl: 900000
    header:
      # Header头 Token 名称
      tokenkey: lqsblog-token
  # 上传文件 配置
  file:
    # 文件上传目录绑定的自定义网址,可为空(注意如果填写必须 / 结尾),如下格式:
    # upload-weburl: http://127.0.0.1:3001/
    # 默认为空,则上传文件目录的网址为:自定义映射的静态资源网址(${lqsblog.weburl} + ${spring.mvc.static-path-pattern}})
    # 参考: cc.liqingsong.api.common.config.MvcConfig.java; cc.liqingsong.common.utils.Upload.java;
    upload-weburl:
    # 文件上传的目录(注意必须 / 结尾) 绝对地址(注意Linux和Windows上的目录结构不同)
    upload-dir: E:/uploads/
    # 允许图片上传的类型
    img-type:
      - image/png
      - image/gif
      - image/jpg
      - image/jpeg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 2、cd 到项目目录下,应用部署

# 但是此命令,如果关闭命令窗口,服务也会关闭
java -jar lqsblog-api-1.0-SNAPSHOT.jar
# 若:`lqsblog-api-1.0-SNAPSHOT.jar` 与 `application-local.yml` 不在同一目录:可执行: java -jar lqsblog-api-1.0-SNAPSHOT.jar --spring.config.location=/val/usr/application-local.yml

# or

# 你可以利用 nohup 进行管理
nohup java -jar lqsblog-api-1.0-SNAPSHOT.jar &
# nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行
# 当用 nohup 命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out的文件中
# 除非另外指定了输出文件,如:$ nohup java -jar test.jar >temp.txt & ,这种方法会把日志文件输入到你指定的文件中,没有则会自动创建

1
2
3
4
5
6
7
8
9
10
11
12

其他命令:


# 查看日志(动态显示)
$ tail -f output.log

# 查看日志(一次性显示整个文件)
$ cat output.log

# jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
$ jobs 

# ps 命令用于查看当前正在运行的进程。
# 所有进程
ps -ef
ps -aux
# a:显示所有程序 
# u:以用户为主的格式来显示 
# x:显示所有程序,不以终端机来区分

# grep 是搜索
# 查看所有进程里 是 java 的进程信息
ps -ef | grep java
ps -aux | grep java

# 查看使用某端口的进程
lsof -i:8080

# 杀死进程
sudo kill 进程号

kill -9 进程号 #绝杀

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

然后你api网址就是 IP:端口

# 3、绑定域名,如果你需要绑定域名,你可以利用 nginx 反向代理

http {
    # 内部添加以下内容
    server {
        # 监听 80 端口 ,你也可以设置其他端口但是访问域名时需要加上端口访问
        listen       80;
        # 你的网址,如果是本地测试,也可以设置你本地的ip
        server_name  api.liqingsong.cc;
        location / {
          # 代理地址,你本地 springboot 的访问地址
          proxy_pass  http://x.x.x.x:8080;
          index  index.html index.htm;
            
        }  
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16