zoukankan      html  css  js  c++  java
  • mall商城项目搭建过程记录

    这是一个我在github上看到的开源项目,采用的技术都是较新的技术

    技术选型

    Vue

    SpringBoot

    mybatis

    MybatisGenerator

    Redis

    rabbitMQ

    Docker

    Linux(CenOS7)

    开发工具

    IDEA

    HbuilderX

    Navicat15

    RedisDesktopManager

    VirtualBox(开源虚拟机软件)

    ITerm2(远程连接Linux命令行工具(mac上))

    搭建项目过程:

    安装Vue

      上vue官网https://vuejs.org/下载vue.js,并且将他复制到项目目录下,并在script标签引用

    创建SpringBoot项目

      首先安装maven然后在idea创建web项目,并在pom.xml中引入下列依赖

      <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
        </parent>
    
        <dependencies>
    
            <!--引入springboot的web支持,帮你封装好了很多个依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--springboot中集成jsp,下面三个 注意scope属性影响打war包-->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
                <scope>provided</scope>
            </dependency>
    
            <!--springboot整合mybatis,阿里的数据源,mysql或者Oracle-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.1</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.12</version>
            </dependency>
            <!--<dependency>-->
                <!--<groupId>com.oracle</groupId>-->
                <!--<artifactId>ojdbc6</artifactId>-->
                <!--<version>6.0</version>-->
            <!--</dependency>-->
            <!--<dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>-->
    
            <!-- fastjson格式转换 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.15</version>
            </dependency>
    
            <!--引入springboot测试依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <!--引入lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
                <scope>provided</scope>
            </dependency>
    
            <!--引入devtools全局热部署,谨慎使用,和redis反序列化有缓存冲突,反序列化时报错-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
    
            <!--引入jedis-->
            <dependency>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
                <version>2.9.0</version>
            </dependency>
            <!-- 引入一个工具包 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.4</version>
            </dependency>
    
        </dependencies>
    

      

    然后启动项目即可,

    安装Linux:

    现在十点半,全部弄完。趁热打铁把这片博客的烂尾写一下。

    这篇博客把liunx从下载CenOS7到VirtualBox创建虚拟机并分区写得非常详细清楚,只不过我的系统是OS系统,Xshell没有OS的开源版本,所以找了ITerm2作为替代

    但是连接步骤基本一致,没什么可说的

    https://github.com/macrozheng/mall-learning/blob/master/docs/reference/linux_install.md

    关键是在连接过程中遇到的几个问题

      一,IP地址

      一开始还没有发现,但是后来发现虚拟机一启动就会ip自动+1,但是ITerm2的连接信息是写死在配置文件中的,所以就考虑能不能固定ip,必然是可以的

      1.查看自己的配置文件名:

    $ cd /etc/sysconfig/network-scripts 
    $ ls //展示文件夹下所有文件名

      然后选择第一个,名字会不一样,选第一个打开编辑

      2.修改配置文件

      vim ifcfg-enp0s3

      3.修改配置文件信息

    TYPE="Ethernet"
    PROXY_METHOD="none"
    BROWSER_ONLY="no" 
    BOOTPROTO="static"  //改为static静态 dync是动态
    NM_CONTROLLED="no"
    
    DEFROUTE="yes"
    IPV4_FAILURE_FATAL="no"
    IPV6INIT="yes"
    IPV6_AUTOCONF="yes"
    IPV6_DEFROUTE="yes"
    IPV6_FAILURE_FATAL="no"
    IPV6_ADDR_GEN_MODE="stable-privacy"
    NAME="enp0s3"
    UUID="73df0aff-e60c-4907-ba9c-9faf3a444a17"
    DEVICE="enp0s3"
    ONBOOT="yes"
    
    IPADDR=192.168.3.24   //固定ip地址
    NETMASK=255.255.255.0   //子网掩码
    GATEWAY=192.168.0.1 //网关

      然后 按esc 再输入:wq保存编辑

      4.重启网络服务

     service network restart

      检查一下,就完成了

    还有一个问题是用户的,因为root账号存在安全隐患所以一般都是禁用的,所以创建自己的用户并禁用root

    sudoers这个文件好像一个令牌,只要普通用户在必要操作时,前面加上sudo 就相当于使用了root账号的权限,前提是需要在sudoers上登记留下大名

      1.首先查看sudoers文件的路径

    # whereis /etc/sudoers

      2.查看文件的读写权限

    # ls -l /etc/sudoers

      一般是只有读的权限rr

      3.授权

    # chmod -v u+w /etc/sudoers

      这样就变成了读写权限

       4.编辑文件

    # vim /etc/sudoers

      找到“root     ALL=(ALL)     ALL ”这一行,在他下面加上“username    ALL=(ALL)      ALL”,这样就算留下大名了

      5.回收权限

    # chmod -v u-w /etc/sudoers

      这下就可以在命令行前加上sudo和使用root是一样的效果

    中途还有一点小插曲,因为是第一次用Linux,在我第一次键入密码时,发现怎么打也打不上,结果发现是不显示的。。记录一下,我还头疼了好一会。。

    还有

    $ su root
    # su username

    这是切换用户操作,$代表当前用户是普通用户,切换到root需要键入密码

    #代表当前用户是root用户,切换到普通用户不需要键入密码,就是这么霸道

    安装 Docker

      昨天晚上把docker在虚拟机上安装了一下,今早趁热打铁来写一下博客

      docker的安装并不难,cenOS以及就集成了yum,首先看一下用指令看一下工具是否齐全

    rpm -qa|grep yum
    rpm -qa|grep lvm2

      docker首先需要yum-utils来提供yum-config-manager 然后 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

      如果工具不齐全,则下载即可

    $ sudo yum install -y yum-utils 
      device-mapper-persistent-data 
      lvm2

      然后添加源仓库,可以选择官方的或阿里的都可以,我一不小心添加了两个,然后下载的时候阿里的死活下载不下来,网上查询也查不到。

    $ sudo yum-config-manager 
        --add-repo 
        https://download.docker.com/linux/centos/docker-ce.repo

      添加完后可能需要建立一下元数据缓存

    $ sudo yum makecache
    $ sudo yum install docker-ce

      启动docker,然后使用docker version查看版本,安装完毕

    $ systemctl start docker
    $ docker version

      最后说一说安装过程中遇到的问题,首先因为我是第一次使用这个虚拟机,在我下载docker的时候,下载报错,提示尚未安装GPG密钥

    $ sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

      添加完密钥后再安装阿里云的死活拉不下来,也没去找为什么拉不下来,因为我添加了两个源仓库,所以直接打算删掉阿里的

       yum repolist查看所有的源,发现有阿里的

     yum repolist

      至于怎么删除,百度了一下怎么删除源,也没有找到,都说用yum remove <包名> 我这个也不是包,压根没下载下来

      一开始我用yum-config-manager展示所有的仓库,里面有一条属性base_persistdir = /var/lib/yum/repos/x86_64/7这是存储地址

      找到阿里云的仓库,把对应的存储地址删掉,没用,也对,这应该是下载下来之后的保存地址,我还没下载下来。

      后来我灵机一动,这玩意估计是写在配置文件里的,只要找到配置文件应该就可以改了。

    $ cd /etc
    $ ls

      下面有

      yum  yum.conf  yum.repos.d  

      yum.conf是yum的配置文件,另外两个是文件夹,一看yum.repos.d就很可疑,进去把阿里云的删掉

      然后再重建元数据缓存,再下载,果然就成功了~~~·

    SpringBoot项目创建Docker镜像

      创建镜像,首先搭建镜像

    docker run -d -p 5000:5000 --restart=always --name registry2 registry:2

      有时候遇到镜像下载不下来的情况,可以采用下面这篇博客,使用阿里云的加速器,亲测有效

           https://blog.csdn.net/weixin_43569697/article/details/89279225

      镜像下载完毕后我要们开启远程API

    vi /usr/lib/systemd/system/docker.service

      需要修改的部分

    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

      修改后的样子

    ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

      让Docker支持http上传镜像

    echo '{ "insecure-registries":["192.168.3.101:5000"] }' > /etc/docker/daemon.json
      修改配置后需要使用如下命令使配置生效
    systemctl daemon-reload
      重新启动Docker服务
    systemctl stop docker
    systemctl start docker
    开启防火墙的Docker构建端口
    firewall-cmd --zone=public --add-port=2375/tcp --permanent
    firewall-cmd --reload

    再在pom.xml文件中添加以下依赖

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.1.0</version>
        <executions>
            <execution>
                <id>build-image</id>
                <phase>package</phase>
                <goals>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
            <dockerHost>http://192.168.3.101:2375</dockerHost>
            <baseImage>java:8</baseImage>
            <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
            </entryPoint>
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>

      然后点击maven中的package等跳出success就可以了,可以使用docker images查看镜像,会发现项目已经添加到镜像中了

    SpringBoot项目在Docker容器中部署

       运行项目

    docker run -p 8080:8080 --name mall
    --link mysql:db 
    -v /etc/localtime:/etc/localtime 
    -v /mydata/app/admin/logs:/var/logs 
    -d mall-tiny/mall:1.0-SNAPSHOT

      可以通过

    sudo docker logs f4c6bf7d7b2a8079ff85147a63d1efb4214d2f6c33acb05db3c107ceae592bf5

      命令查看日志,f4c6bf7d7b2a8079ff85147a63d1efb4214d2f6c33acb05db3c107ceae592bf5是run之后返回id

      

      这里,我多次打包后,images中出现了<none>镜像,网上查了一下说是不占用存储空间,但是基于我的强迫症,一定想要给他弄掉,所以记录几个docker常用的命令

      因为删除镜像需要先把镜像的运行容器关闭并删除,列出运行中的容器,后面加上 -a 代表列出所有容器,包括结束的

    # docker container ls 

      然后关闭容器

    # docker container stop <name>

      移除容器/镜像

    # docker rm <容器名>
    # docker rmi <镜像名>

     完成

    mybatisGenerator自动生成代码,集成Mybatis

      首相在pom.xml文件中Mybatis的依赖关联,springboot集成了Mybatis,直接引入即可

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
         <version>1.3.1</version>
    </dependency>

      接下来关联mybatisGenerator,需要关联连接驱动,创建生成的文件信息

      在pom.xml中添加

            <!--   mysql连接驱动   -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.18</version>
            </dependency>    

      以及

                <plugin>
                    <groupId>org.mybatis.generator</groupId>
                    <artifactId>mybatis-generator-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <verbose>true</verbose>
                        <overwrite>true</overwrite>
                    </configuration>
                    <executions>
                        <execution>
                            <id>Generate MyBatis Artifacts</id>
                            <goals>
                                <goal>generate</goal>
                            </goals>
                        </execution>
                    </executions>
                    <dependencies>
                        <dependency>
                            <groupId>org.mybatis.generator</groupId>
                            <artifactId>mybatis-generator-core</artifactId>
                            <version>1.3.2</version>
                        </dependency>
                    </dependencies>
                </plugin>

      然后在application.properties同级目录下创建generatorConfig.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
            PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
        <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <!--    <classPathEntry  location="C:UsersAdministratorDownloadsmysql-connector-java-8.0.13.jar"/>-->
        <classPathEntry  location="/Users/jinsheng/maven/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar"/>
        <context id="DB2Tables"  targetRuntime="MyBatis3">
            <commentGenerator>
                <property name="suppressDate" value="true"/>
                <!-- 是否去除自动生成的注释 true:是 : false:否 -->
                <property name="suppressAllComments" value="true"/>
            </commentGenerator>
            <!--数据库链接URL,用户名、密码
               1.一般jdbc数据库的版本6.x以上,都是com.mysql.cj.jdbc.Driver  其他的低版本就是com.mysql.cj.jdbc.Driver
             -->
            <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/mall?serverTimezone=GMT" userId="root" password="js818157">
            </jdbcConnection>
            <javaTypeResolver>
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>
            <!-- 生成模型的包名和位置-->
            <javaModelGenerator targetPackage="com.modal" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
                <property name="trimStrings" value="true"/>
            </javaModelGenerator>
            <!-- 生成映射文件的包名和位置-->
            <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
                <property name="enableSubPackages" value="true"/>
            </sqlMapGenerator>
            <!-- 生成DAO的包名和位置-->
            <javaClientGenerator type="XMLMAPPER" targetPackage="com.dao" targetProject="src/main/java">
                <property name="enableSubPackages" value="true"/>
            </javaClientGenerator>
            <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
            <table tableName="tbluser" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
        </context>
    </generatorConfiguration>
    View Code

      这个文件有几处地方需要根据需要修改

      在application.properties中添加

    spring.datasource.url=jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
    spring.datasource.username=root
    spring.datasource.password=xxxxxx
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    mybatis.mapper-locations=classpath:mapper/*.xml

    等配置信息

    这里记录一下几个比较坑的地方,首先的包的版本冲突,我使用的mybatis是8.0版本,mysql-connection-java.jar的版本如果太低就会报错

    还有驱动名称:

      低版本的驱动名称是:com.mysql.jdbc.Driver
      高版本的驱动名称是:com.mysql.cj.jdbc.Driver

    不过这个你在application.properties中配置了‘spring.datasource.driver-class-name’,springboot会友好的提示你

    第二个,@Mapper和@MapperScan注解,@MapperScan放在Springboot的启动类上告诉springboot到哪里找mapper接口,如果配了这个就不需要再配置@Mapper了

    然后扫描不要为了偷懒只写一个('com'),我就偷懒结果扫描了所有com下的类,注入出现了同名冲突

    第三个,扫描mapper.xml不到,出现报错Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required,这需要在application.properties中加上

    mybatis.mapper-locations=classpath:mapper/*.xml,告诉springboot需要到哪里去找xml文件,

  • 相关阅读:
    Yii数据库操作增删改查-[增加查询更新删除 AR模式]
    Yii2 关于时间格式的用法
    常用Linux命令
    数据库设计规范
    PHP代码规范
    git fetch 的简单用法:更新远程代码到本地仓库及冲突处理
    yii2 URL重写 nginx的配置
    Linux下免安装mysql
    在CentOS下搭建自己的Git服务器
    开源技术推荐之个人使用心得
  • 原文地址:https://www.cnblogs.com/jinsheng1027/p/12232927.html
Copyright © 2011-2022 走看看