升级版自助快递查询系统,采用SpringBoot + Apache Shiro + Mybatis Plus + Thymeleaf 架构。kuaidi-cms致力于开发最精简、实用的快递CMS管理系统,完美自适应。
上篇文章 一款精美的后台内容管理系统 讲解了环境搭建。并添加了一些扩展功能。今天接着讲怎么在服务器部署快递查询系统。
CREATE DATABASE kuaidi_cms.sql;
docs/db/kuaidi_cms.sql
resources/application.yml
)配置文件 datasource redis
mvn -X clean package -Dmaven.test.skip=true
编译打包,然后执行 java -jar target/kuaidi-cms.jar
mvn springboot:run
SpringbootApplication.java
http://localhost:8082
http://localhost:8082/admin
使用账号密码admin,123456登录系统后台。 批量导出快递信息
项目引入 hutools
工具, Excel
导入导出功能特别方便。直接看下面代码:
@GetMapping("/export") @ResponseBody public void exportDataByGet(String userName, String phone, HttpServletResponse response) throws Exception{ ArrayList<Map<String, Object>> excelRows = CollUtil.newArrayList(); List<KuaiDi> kuaiDiList = kuaiDiService.list( new LambdaQueryWrapper<KuaiDi>() .eq(StringUtils.isNotBlank(userName), KuaiDi::getUserName, userName) .eq(StringUtils.isNotBlank(phone), KuaiDi::getPhone, phone) ); if(CollUtil.isNotEmpty(kuaiDiList)){ kuaiDiList.stream().forEach(k -> { Map<String, Object> tempRow = new LinkedHashMap<String, Object>(){{ put(Constants.EXCEL_HEADER_ALIAS_LIST.get(0), k.getKuaidiNo()); put(Constants.EXCEL_HEADER_ALIAS_LIST.get(1), k.getUserName()); put(Constants.EXCEL_HEADER_ALIAS_LIST.get(2), k.getPhone()); put(Constants.EXCEL_HEADER_ALIAS_LIST.get(3), k.getCompany()); }}; excelRows.add(tempRow); }); } // 通过工具类创建writer,默认创建xls格式 ExcelWriter writer = ExcelUtil.getWriter(); // 一次性写出内容,使用默认样式,强制输出标题 writer.write(excelRows, true); //out为OutputStream,需要写出到的目标流 //response为HttpServletResponse对象 response.setContentType("application/vnd.ms-excel;charset=utf-8"); //kuaidi.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码 response.setHeader("Content-Disposition","attachment;filename=kuaidi.xls"); ServletOutputStream out=response.getOutputStream(); writer.flush(out, true); // 关闭writer,释放内存 writer.close(); //此处记得关闭输出Servlet流 IoUtil.close(out); } 复制代码
这里说明一下:
项目前端
主要方便快速查询快递信息,下图是通过手机号一次查询它所有的快递信息。显示效果如下图:
项目后端
项目后端主要做人员管理,快递信息管理等功能,主要功能就是快递信息管理这块。快递信息管理页面效果如下图:
这里功能主要包括新增,修改,删除,批量导入,批量导入等功能。对于单条数据也支持快递信息查询。效果如下图:
测试环境
我也将环境部署在的服务器上,有兴趣的伙伴可以试试。
前端访问地址: www.restlessman.cn/
后端访问地址: www.restlessman.cn/admin
测试账号: guest 123456789
SpringbootApplication修改
SpringbootApplication添加两个方法:
/* * http重定向到https * @return **/ @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint constraint = new SecurityConstraint(); constraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); constraint.addCollection(collection); context.addConstraint(constraint); } }; tomcat.addAdditionalTomcatConnectors(httpConnector()); return tomcat; } @Bean public Connector httpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); //Connector监听的http的端口号 connector.setPort(80); connector.setSecure(false); //监听到http的端口号后转向到的https的端口号 connector.setRedirectPort(443); return connector; } 复制代码
添加 ssl
证书
阿里云、腾讯云等都有免费的证书,因为 Springboot
项目是使用的内嵌式 Tomcat
,所以我们下载 Tomcat
证书即可。
下载后的证书有两个文件:
配置application-*.yml文件修改
因为需要在服务器上部署项目,所以这里修改 application-prd.yml
文件,添加如下内容:
server: port: 443 tomcat: uri-encoding: utf-8 ssl: key-store: classpath:restlessman.cn.pfx key-store-password: R0nDaI1d key-store-type: PKCS12 复制代码
下载项目
执行如下命令下载项目到本地:
git clone https://gitee.com/huaairen/kuaidi-cms.git 复制代码
项目打包
下载项目到本地磁盘路径,打开 cmd
窗口,执行命令:
mvn clean package -DskipTests 复制代码
打包成功 jar
包会生成在项目 target
目录下。上传打包好的 *.jar
上传到服务器目录,这里我上传到 /usr/software/kuaidi-cms
。如果没有此目录执行如下命令创建即可。
mkdir -p /usr/software/kuaidi-cms 复制代码
创建 start.sh
在服务器路径 /usr/software/kuaidi-cms
创建脚本文件 start.sh
vi start.sh nohup java -jar kuaidi-cms.jar >kuaidi.log & #添加这个内容。 :wq #保存退出 chmod +x start.sh #添加执行权限 复制代码
运行项目
执行 start.sh
./start.sh #运行项目 tail 200 -f kuaidi.log #查看启动日志 复制代码
下载项目
执行如下命令下载项目:
cd /usr/myWorkSpace git clone https://gitee.com/huaairen/kuaidi-cms.git 复制代码
打包镜像
切换到项目本目录,执行如下命令打包 docker
镜像
cd /usr/myWorkSpace/kuaidi-cms mvn clean package dockerfile:build -DskipTests #docker镜像打包 复制代码
打包成功输出如下信息:
Status: Image is up to date for daocloud.io/library/java:8u40-b22 [INFO] ---> 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] Step 4/8 : ADD ${JAR_FILE} /home/app.jar [INFO] ---> 31dbf0216c31 [INFO] Removing intermediate container 49e5f7126807 [INFO] Step 5/8 : ADD src/main/resources/application-dev.yml /home/conf/application-dev.yml [INFO] ---> aa77c181fcbf [INFO] Removing intermediate container 1ad7028a9a11 [INFO] Step 6/8 : WORKDIR /home/ [INFO] ---> 54c9e19f600c [INFO] Removing intermediate container 2624d1c88f00 [INFO] Step 7/8 : EXPOSE 8082 [INFO] ---> Running in 1fa25c75fca9 [INFO] ---> 7bd0f2decde2 [INFO] Removing intermediate container 1fa25c75fca9 [INFO] Step 8/8 : ENTRYPOINT java -jar -Dspring.config.location=conf/application-dev.yml ./app.jar [INFO] ---> Running in 2756a2c83985 [INFO] ---> 2d15c707ae98 [INFO] Removing intermediate container 2756a2c83985 [INFO] Successfully built 2d15c707ae98 [INFO] [INFO] Detected build of image with id 2d15c707ae98 [INFO] Building jar: /usr/myWorkSpace/kuaidi-cms/target/kuaidi-cms-docker-info.jar [INFO] Successfully built kuaidi-cms/kuaidi-cms:1.0.0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 42.977 s [INFO] Finished at: 2020-04-22T10:45:29+08:00 [INFO] Final Memory: 61M/189M [INFO] ------------------------------------------------------------------------ 复制代码
运行 docker
容器执行如下命令:
docker run -d -p 80:8082 -v /usr/software/kuaidi-cms-docker/conf/application-dev.yml:/home/conf/application-dev.yml --name kuaidi-cms kuaidi-cms:1.0.0 指定配置文件 复制代码