专栏首页不安分的猿人快速迭代-自助快递系统升级了

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

  • 一、项目介绍
  • 二、搭建开发环境
  • 三、功能扩展
  • 四、项目运行效果
  • 五、SSL 认证
  • 六、项目部署
    • 6.1 jar包部署
    • 6.2 docker容器部署

一、项目介绍

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

二、搭建开发环境

  1. 使用IDE导入本项目,IDE需要安装lombok插件
  2. 新建数据库CREATE DATABASE kuaidi_cms.sql;
  3. 导入数据库,数据库文件目录:docs/db/kuaidi_cms.sql
  4. 修改(resources/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. 直接运行SpringbootApplication.java
  6. 前台首页,浏览器访问http://localhost:8082
  7. 后台首页,浏览器访问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);
    }

这里说明一下:

  • 查询匹配的表格数据
  • 组装数据为 ArrayList<Map<String, Object>> 格式
  • 获取ExcelWriter对象,并写入组装好的数据 excelRows
  • 设置response头信息,内容类型等信息
  • 刷新输出流,并关闭writer,out

四、项目运行效果

项目前端 主要方便快速查询快递信息,下图是通过手机号一次查询它所有的快递信息。显示效果如下图:

项目后端 项目后端主要做人员管理,快递信息管理等功能,主要功能就是快递信息管理这块。快递信息管理页面效果如下图:

这里功能主要包括新增,修改,删除,批量导入,批量导入等功能。对于单条数据也支持快递信息查询。效果如下图:

测试环境 我也将环境部署在的服务器上,有兴趣的伙伴可以试试。 前端访问地址: https://www.restlessman.cn/ 后端访问地址: https://www.restlessman.cn/admin 测试账号: guest 123456789

五、SSL 认证

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证书即可。

下载后的证书有两个文件:

  • pfx-password.txt 证书密码
  • *.pfx 证书文件

配置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

六、项目部署

6.1 jar包部署

下载项目 执行如下命令下载项目到本地:

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 #查看启动日志

6.2 docker容器部署

前提

  • Linux服务器
  • 已安装Docker环境
  • Linux服务器已安装工具Git、Maven

下载项目 执行如下命令下载项目:

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 指定配置文件

本文分享自微信公众号 - 不安分的猿人(Restless-man),作者:不安分的猿人

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jekyll + Github Pages 搭建个人免费博客

    今天亲手通过 Jekyll 搭建了一套免费博客,搭建步骤其实超级简单。你不需要购买域名,也不需要购买服务器,就可以轻松拥有你自己的博客。

    不安分的猿人
  • Linux 环境定时重启 tomcat

    亲手搭建的博客系统经常会宕机,一直想着定时检测tomcat服务挂掉之后进行重启操作。昨天终于有时间,就把这个事情做了一下,最终可以正常工作。本篇就记录一下我解决...

    不安分的猿人
  • 一款 Windows 上的超级搜索器 Wox

    Wox 是一款开源项目,安装包下载地址:https://github.com/Wox-launcher/Wox/releases 这里需要下载三个软件包,Eve...

    不安分的猿人
  • 原 荐 SpringBoot 2.0 系列0

    石奈子
  • django 源码改写笔记

    我们后台项目有用到 django的 admin 后台模块,有些配置的功能完全可以通过 django 就可以实现,不用前端再开发管理页面了,但是有些操作需要自定义...

    用户4945346
  • Java Web之tomcat开机后台启动

    Windows下安装好了tomcat了以后,可以直接进如 bin 目录双击 startup.bat 来启动,但是这样启动有一个文集就是任务栏会一直存在一个小窗...

    YungFan
  • tomcat多实例

    安装tomcat · 复制tomcat cp -a tomcat/ tomcat2 cp -a tomcat/ tomcat3 · 修改配置文件的端口 to...

    零月
  • 被严重 “高估” 的未来

    最近小灰看了一个久远又经典的科幻电影,讲的是未来世界当中,人类和“复制人”之间的爱恨情仇。

    小灰
  • Tomcat环境部署

    环境说明 系统版本:CentOS 7.2 x86_64 软件版本:jdk-8u171、tomcat-8.0.27 Jdk的下载地址 Tomcat的下载地...

    山山仙人
  • Linux下Tomcat使用详解

    版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://b...

    shaonbean

扫码关注云+社区

领取腾讯云代金券