快速迭代-自助快递系统升级了
一、项目介绍
升级版自助快递查询体系,采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 架构。kuaidi-cms致力于开发最精简、实用的快递CMS管理体系,完美自适应。
上篇文章[ p r _ :一款精美的后台内容管理体系讲解了环境建立。并增加了一些扩展功用| ] A F 4 Z A 。今天接着讲怎么在服务器部署快递查询体系。
二、建立开发环境
- 运用IDE导入本项目,IDE需求装置lombok插件
- 新建数据库
CREATE DATABASE kuaidi_cms.sql;
- 导入数据库,数据库文件目录:
docsC 0 P a 6 L/db/kuaidi_cms.sql
- 修正(
re + tsources/application.yml
)装备文件- 修正数据库链接相关衔接串、用户名和暗码(可查找
datasource
) - redis装备(可查找
redis
)
- 修正数据库链接相关衔接串、用户名和暗码(可查找
- 运转项目(三种方式)
- 项目根目录下履行
mvn -X clean package -Dmaven.test.skip=true
编译打包,然后履行java -jar target/kuaidi-cms.jar
- 项目根目录下履行
mvn springboot:run
- 直接运转
SpringbootApplic^ B [ation.java
- 项目根目录下履行
- 前台主页,浏览器拜访
http://localhost:8082
- 后台主页,浏览器拜访
http://localhost:8082/admin
运用账号暗码admin,123456登录体x # b J t * $系后台。
三、功用扩展
批量导出快递信息
项目引进hutools
东西,Excel
导入导出功用特别便利。直接看下面代码5 H n:
@GetMapping("/export")
@ResponseBody
public void exportDataByGet(String usx c l b f v * :erName, String phone, HttpServletResponse response) throws Exception{
ArrayList<b $ $ Map<String, Object>> excelRows = CollUA M Qtil.newArz : l o o ! ^ TrayList();
List< T Q m S K;KuaiDi> kuaiDiList = kuaiDiService.list(
new Lam% K i Q }bdaQue| * 5 . A 5ryWrapper<KuaiDi>()
.eq(St9 } M ? 5 tringUtils.isNotBlank(userName), KuaiDi::getUserName, userName)
.eq(StringUtils.il y J A |sNotBlank(phone), KuaiDi::getPhone, phone)
);
if(CollUtil.isNotEmpty(kuaiDiList)){
kuaiDC D g ( 4 Y .iList.stream().forEach(k -> {
Map<String, Ob^ I + ( _jecth g h> tempRow = nC O Yew LinkedHashMap<StriA ) X N Y D q &ng, Object>(){{
put(Constants.EXCEL_HEADER_ALIAS_LIST.get(0), ky O * : r P ` 3 3.getKuaid. 4 }iNo());
put(Constants.EXCEL_HEADER_ALIAS_LIST.get(1), k.getUserName());
put(Constants.EXCEL_HEADER_ALIAS_LIST.get(2)Q O ! n i 7 Y ^, k.ge= d ; $ TtPhone());
put(Constants.EXCEL_HEADEr V _ : d c XR_ALIAS_LIST.get(3),M n P R E l u | k.getCompaH @ m x Q ! x y :ny());
}};
excelRowD N ls.add(tempRow);
});
}
// 经y W U +过东西类创立writer,默许创Q B c立xls格局
ExcelWriter writer = ExcelUtil.getWriter();
// 一次; & m !性写出内容,运用默许款式,强Z r b ? e g制输出标题
writer.~ # n : swrite(excelRows, true);
//out为OutputStream,需求写出到的方针流
//response为HttpServletRek P E % & hsponse目标
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//kuaidi.xls是弹出下载对话框的文件名,不能为中文h 7 C - ,中文请自行编码
response.setHeader("Content-Disposition","a4 U h E X ]ttachment;filename=kuaidi.xls");
ServletOutputStream out=response.getOutputStream();
writer.flush(og g lut, true);
/_ 2 1 F B/ 封闭writer,释放内存
writer.close();
//此处记住封闭输- : B出Servlec Y J 7 5 m 7 ^ +t流
IoUtil.close(out);
}
这里说明一下:
- 查询匹配的表格数据
- 组装数据为 ArrayList<Map<String, Object>> 格局
- 获取ExcelWriter目标,并写入组装好的数据 excelRows
- 设置response头信息,内容类型等信息
- 改写输出流,并封闭writer,out
四、项目运转作用
项目前端
首A x + c 3 H要便利快速查询快递信息,下图是经过手机号一次查询它所有的快递信息。显示作用如下图:

项目后端
项目后端首要做人员管理,快递信m F r 1 . x i息管理等功用j x l f U y ! K,首要功用便是快递信息管理这块。快递信息管理页面作用如下图:

这里功用首要包括新增,修正j 2 @ – ! N 6 l O,删除,K q ,批量导入,批量导入等功用。关于单条数据也支持快递信息查询。作用如下图:

测9 $ ( _ c m ,验环境
我也将环境部署在的服务器上,有兴趣的伙伴能够试试。
前端拜访地址: www.restlessman.c) W $ B % dn/
后端拜访地址: www.restlessmag t N J * S a rn.cn/admin
测验账号: guest 123456789
五、SSLE K ] ! z L K J 认证
Spriu w 3 1 Q A 9 t Nn^ q U U v #gbootApplication修正
SpringbootApplication增加9 # (两个方法:
/*
* http重定向到https
* @return
**/
@Bean
publi[ k & l lc TomcatServletWebServerFactory servletContainer() {
TomcatServletWy / 1 # _ # lebServerFactork k O Gy tomcat = new TomcatServletWebServerFactory()} n K { ^ i A G {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint cons} v , d S ntraint8 ^ & m V ^ v X e = new SecurityCon% ) K k u u b d #straint();
constraint.setUserConstraintD ` W W d G = * T("CONFIDENTIAL");
SecurityCollection collection = new Securiz C u k a ^ K ityCollection();
collection.addPattern("/*");
constraint.addCoF ) N ] 2 -llecF J i I L ^tion(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connectol $ # J . ? Nr connector = new Connector("org.apache.coyote.http11.Http11NioM 1 [ ) ~ U oProtocol");
connector.setScheme("http6 [ . +");
//Connector监听的http的端口号
connector.setPort(80);
connector.setSecure(false);
//监听到http3 K l !的端口号后转向到的https的端口号
connector.setRedirectPort(443);
return com [ 7 _nnector;
}
增加ssl
证书
阿里云H d a _ 4、腾讯云等都有免费的证书,因q ~ K Q @ * o F为Springboot! M z q
项目是运用的内嵌式Tomcat
,所以咱们下载Tomcat
证书即可, f @ 1 u ; / } j。

下载后的证书有两个文件:
- pfx-password.txt 证书暗码
- *.pfx 证书文件
装备applicat, e k aion-*.yml文件修正
因为需求在服务9 J & ` Z g B V ^器上部署h M :项目,所以这里修正application-prd.yml
文件,增加如下内容:
server:
port: 443
tomcat:
uri-encoding: utf-8
ssl:
key-store: classpath:restlessman.cK 5 H L K Q Sn.pfx
key-store-password: R0nDaI1d
key-store-type: PKCS12
六、项目部署
6.1 jar包部署
下载项目
履行如下指令下载项目到本地:
git clone https://gitee.com/huaairen/kU % H / muaidi-cms.git
项目打包
下载项目到本地磁盘途径,翻开 cmd
窗口,履行指令:
mvn clean package -. M e + T .DskipTests
打包成功jar
包会生成在项目target
目录下。上传打包好的 *.jar
上传: I ! O 1 :到服务器目录,这里我上传到/usr/software/kuaidi-cms
。假如没有此目录履行| U !如下指令创立即可。
mkdir -p /usr/software/kuaidi-cms
创立start.sh
在服务器途径/usr/s= 3 ! K Foftware/kuaidi-m O = ; # % J : -cms
创立脚本文件start.sh
vi start.sh
nohup java -jar kuaidi-cms.jar >kuaidi.lo q 6 H B { k tog & #增加这个内容。
:wq #保存退出
chmod +x start.sh #增加履行权限
运转项目
履行start.sh
./start.sh #运转项目
tail 200 -f kuaidi.lS Q b -og #检查发动日志
6.2 docker容器部署
条件
- Linux服务器
- 已装置Docker环境
- Linux服务器已装置东西Git、My 1 0 . D d G # Ravh q D M o C { men
下载项目
履行如下指令下载项目:
cd /X N ` J Y tusr/myWorkSpace
git clone https:/| e $ M Q J X C x/gitee.co0 f O { B sm/huaairen/kuaidi-cms.git
打包镜像
切换到项目本目录,履行如下指令打包docker
镜t r ~ 9 / |像
cd /usr/my+ K 8 | c C xWorkSpace/kuaidi-cms
mvn clean package dockerfile:build -DskipTests #docker镜像打包
打包成功输出如下信息:
Status: Image is up to! s ^ p g P date for daocloud.io/library/java:8u40-b22
[INFO] --2 m o e /-> 0a5e1e22983a
[INFO] Step 2/8 : VOLUME /tmp
[INFO] ---> Using cache
[INFO] ---> 9a1964ebbeca
[INFO] Step 3/8 : ARG JAR_FILE
[INFO] ---> Using cache
[INFO] ---> 168da3d9f3d9
[INFO] StepA r / M 4/8 : ADD ${JAR_FILE} /homW } %e/app.jar
[INFO] ---> 31dbf0216c31
[INFO] Removing intermediate container 49e5f7126807
[INFO] Step 5/8 : ADD srG L H m , ^ i Mc/main/resources/applicat@ ? 6 ( 3ion-dev.yml /home/conf/applicaZ M f jtion-dev.yml
[INFO] ---> aa77c181fcbf
[IN? y z _ W K w $ 0FO] Removing intermediate container 1ad7028a9a11
[INFO] Step 6/8 : WORKDIR /home/
[INFO] ---> 54c9e19f600c
[INFO] Removing intermediate container 2621 5 / ; 0 { } )4d1c88f00
[INFO] Step 7/8 : EXPOSE 8082
[INFO] ---> Running in 1fa25c75fca9
[INFO] ---> 7bf e } Q 0 E = } td0f2decde2
[INFO] Removing intermediate contai* % } / . t ~ Cner 1fa25c75fca9
[INFO] Step 8/8 : ENTRYPOINT java -jar -Dspring.config.location=conf/application-dev.yml ./app.jar
[INFO] ---> Running in 2756a2c83985
[INFO] ---> 2d15c707ae98
[INFO] Removi} W . U 7 dng intermediate container 2756a2c83985
[INFO] Successfully built 2d15c707ae98
[INFO]
[INFO] DeteY q S @ e K / lcted build of image with id 2dS / 15c707ae98
[INFO] Building jar: /usrv 9 Z y/myWorkSv 1 V o 9pace/kuaids q ! a li-cms/target/kuaidi-cms-docker-info.jar
[INFOZ [ ^ $ , B Y u R] Successfully built kuaidi-cms/kuaidi-cmF C U e n j Y Vs:1.. q ( N i ( C G0.0
[INFO] ------------------------------------------------------------------------
[I0 6 @ O 8NFO] BUILD SUCCESS
[INFO] --P f $ C 6 k a z--------------------~ T @ H k y------$ D x T h Z-------V e U b X [ !-------------------------------------
[INFO] Total time: 42.977 s
[INFO] Finished at: 2020-04-22T10:45:29+08:00
[INFO] FiW 9 { *nal Memory: 61M/189M
[INFO] --------------------------------------------E y c = 8----------------------------
运转项目
运转H b . K O D 2 % 3docker
容器履行h 6 L H如下指令:
docker run -d -p 80:8082 -v /usr/software/kuaidi-cms-dockerX U / P F D/conf/application-dev.yml:/home/conf/application-dev.yml --name kuaidi-cms kuaidi-cms:1.0.0 指定装备文件