mall商城项⽬搭建过程记录这是⼀个我在github上看到的开源项⽬,采⽤的技术都是较新的技术
技术选型
Vue
SpringBoot
mybatis
MybatisGenerator
Redis
rabbitMQ
小商店Docker
Linux(CenOS7)
开发⼯具
IDEA
HbuilderX
Navicat15
RedisDesktopManager
VirtualBox(开源虚拟机软件)
ITerm2(远程连接Linux命令⾏⼯具(mac上))
搭建项⽬过程:
安装Vue
创建SpringBoot项⽬
⾸先安装maven然后在idea创建web项⽬,并在l中引⼊下列依赖
<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>at.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!--springboot整合mybatis,阿⾥的数据源,mysql或者Oracle-->
<dependency>
<groupId&batis.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&acle</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>
qq女生可爱网名</dependency>
<!--引⼊jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!-- 引⼊⼀个⼯具包 -->
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
然后启动项⽬即可,
安装Linux:
现在⼗点半,全部弄完。趁热打铁把这⽚博客的烂尾写⼀下。
这篇博客把liunx从下载CenOS7到VirtualBox创建虚拟机并分区写得⾮常详细清楚,只不过我的系统是
OS系统,Xshell没有OS的开源版本,所以了ITerm2作为替代但是连接步骤基本⼀致,没什么可说的
关键是在连接过程中遇到的⼏个问题
⼀,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 \
download.docker/linux/po
添加完后可能需要建⽴⼀下元数据缓存
$ sudo yum makecache
$ sudo yum install docker-ce
启动docker,然后使⽤docker version查看版本,安装完毕
$ systemctl start docker
birth$ 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 f pos.d
f是yum的配置⽂件,另外两个是⽂件夹,⼀看pos.d就很可疑,进去把阿⾥云的删掉
然后再重建元数据缓存,再下载,果然就成功了~~~·
SpringBoot项⽬创建Docker镜像
创建镜像,⾸先搭建镜像
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2
有时候遇到镜像下载不下来的情况,可以采⽤下⾯这篇博客,使⽤阿⾥云的加速器,亲测有效
镜像下载完毕后我要们开启远程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
再在l⽂件中添加以下依赖
<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>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
⾸相在l⽂件中Mybatis的依赖关联,springboot集成了Mybatis,直接引⼊即可
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>林志玲的丰胸
<version>1.3.1</version>
</dependency>
接下来关联mybatisGenerator,需要关联连接驱动,创建⽣成的⽂件信息
在l中添加
<!-- mysql连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
以及
<plugin>
<groupId&ator</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&ator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
然后在application.properties同级⽬录下创建l
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-////DTD MyBatis Generator Configuration 1.0//EN"
"/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以上,都是sql.cj.jdbc.Driver 其他的低版本就是sql.cj.jdbc.Driver
-->
<jdbcConnection driverClass="sql.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="dal" 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" </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.sql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
等配置信息
这⾥记录⼀下⼏个⽐较坑的地⽅,⾸先的包的版本冲突,我使⽤的mybatis是8.0版本,mysql-connection-java.jar的版本如果太低就会报错
还有驱动名称:
低版本的驱动名称是:sql.jdbc.Driver
⾼版本的驱动名称是:sql.cj.jdbc.Driver
不过这个你在application.properties中配置了‘spring.datasource.driver-class-name’,springboot会友好的提⽰你
第⼆个,@Mapper和@MapperScan注解,@MapperScan放在Springboot的启动类上告诉springboot到哪⾥mapper接⼝,如果配了这个就不需要再配置@Mapper了
然后扫描不要为了偷懒只写⼀个('com'),我就偷懒结果扫描了所有com下的类,注⼊出现了同名冲突
第三个,扫描l不到,出现报错Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required,这需要在application.properties中加上
mybatis.mapper-locations=classpath:mapper/*.xml,告诉springboot需要到哪⾥去xml⽂件,
发布评论