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文件,

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/jinsheng1027/p/12232927.html
Copyright © 2011-2022 走看看