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:\Users\Administrator\Downloads\mysql-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文件,

posted @ 2020-01-25 12:13  无弦琴  阅读(2061)  评论(1编辑  收藏  举报