快速迭代-自助快递系统升级了

一、项目介绍

升级版自助快递查询体系,采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 架构。kuaidi-cms致力于开发最精简、实用的快递CMS管理体系,完美自适应。
上篇文章[ p r _ :一款精美的后台内容管理体系讲解了环境建立。并增加了一些扩展功用| ] A F 4 Z A 。今天接着讲怎么在服务器部署快递查询体系。

二、建立开发环境

  1. 运用IDE导入本项目,IDE需求装置lombok插件
  2. 新建数据库CREATE DATABASE kuaidi_cms.sql;
  3. 导入数据库,数据库文件目录:docsC 0 P a 6 L/db/kuaidi_cms.sql
  4. 修正(re + tsources/application.yml)装备文件
    1. 修正数据库链接相关衔接串、用户名和暗码(可查找datasource)
    2. redis装备(可查找redis)
  5. 运转项目(三种方式)
    1. 项目根目录下履行mvn -X clean package -Dmaven.test.skip=true编译打包,然后履行java -jar target/kuaidi-cms.jar
    2. 项目根目录下履行mvn springboot:run
    3. 直接运转SpringbootApplic^ B [ation.java
  6. 前台主页,浏览器拜访http://localhost:8082
  7. 后台主页,浏览器拜访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 FSpringboot! 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

打包镜像
切换到项目本目录,履行如下指令打包dockert 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 指定装备文件

不安分的猿人
孜孜不断的技术共享!


快速迭代-自助快递系统升级了