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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM