转载

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

升级版自助快递查询系统,采用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 )配置文件
    datasource
    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

四、项目运行效果

项目前端

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

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

项目后端

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

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

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

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

测试环境

我也将环境部署在的服务器上,有兴趣的伙伴可以试试。

前端访问地址: www.restlessman.cn/

后端访问地址: 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 指定配置文件
复制代码

不安分的猿人
孜孜不断的技术分享!
快速迭代-自助快递系统升级了

原文  https://juejin.im/post/5ea5a5e1e51d4546e85782d8
正文到此结束
Loading...