首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速迭代-自助快递系统升级了

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

作者头像
不安分的猿人
发布2020-05-08 17:58:19
8630
发布2020-05-08 17:58:19
举报
文章被收录于专栏:不安分的猿人不安分的猿人
  • 一、项目介绍
  • 二、搭建开发环境
  • 三、功能扩展
  • 四、项目运行效果
  • 五、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 指定配置文件

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 不安分的猿人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、项目介绍
  • 二、搭建开发环境
  • 三、功能扩展
  • 四、项目运行效果
  • 五、SSL 认证
  • 六、项目部署
    • 6.1 jar包部署
      • 6.2 docker容器部署
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档