# lqsblog-backend-java-springboot
lqsblog-backend-java-springboot (opens new window) (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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TIP
# 配置
本项目基于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
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-weburl
与lqsblog.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
2
3
4
5
6
7
8
9
TIP
注:数据库后台默认用户名、密码分别是:admin / 123456
# 打包与部署
# 打包
当项目开发完毕,打包项目:
# cd 到项目根目录下,然后运行
mvn clean package
1
2
2
然后每个模块的target下都会生产一个jar包。
# 部署
这里以lqsblog-api包
部署为例:对于部署来讲,你需要以下几步:
# 1、把 lqsblog-api-1.0-SNAPSHOT.jar
与 application-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
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
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
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16