
gulimall项目
参考:别人写得很好的笔记在这里
还有这里
一.虚拟机
1.1下载virtual box/
1.2
使用vagrant快速创建linux虚拟机
推荐使用vagrant创建虚拟机。代替原来的。
搜索vagrant下载页面/
-Download-Windows 64-bit
1.3使用vagrant创建虚拟机
打开cmd指令框
-vagrant
-vagrant init centos/7
-vagrant up
就启动了虚拟机!
上面指令说明:
(查看vagrant镜像仓库
centos/7代表linux系统)
-init之后查看本机中users/45058中生成了一个vagrantfile
-whoami查看用户
-exit退出当前层级
连接虚拟机
-vagrant ssh
1.4虚拟网络设置-端口转发
cmd中输入
-ipconfig
查看virtual box host-only network:
192.168.56.1
打开vagrantfile中的private network
相应修改ip地址为: 192.168.56.10
重载vagrant
-vagrant reload
vagrant操作命令中输入
-ip addr
查看inet 192.168.56.10
测试:
主机ping虚拟机,
虚拟机ping主机
ping 192.168.56.10
cmd新建一个窗口,ping一下虚拟机的ip
ping 192.168.1.153
虚拟机ping本地ip地址,也能得到回复。
二.docker技术
linux安装docker,docker基于镜像启动container的运行环境
每个容器都是一个完整的运行环境。容器之间相互隔离,一个down不影响另一个。
docker hub中可搜索各种软件的镜像
2.1设置docker
文档/
-remove old…
-install…
-config manager…
-cli io…
-start…
-sudo docker images查看镜像
-sudo systemctl enable docker开机自启动
国内阿里云镜像加速(此处忽略)
2.2
docker安装mysql
2.2.1安装
-sudo docker pull mysql:5.7
-sudo docker images检查镜像是否下载
-su root
配置:端口映射:
前者为外部数据,
后者为在容器中的名字,log,数据,配置conf,用户密码
docker run -p 3306:3306 --name mysql
-v /mydata/mysql/log:/var/log/mysql
-v /mydata/mysql/data:/var/lib/mysql
-v /mydata/mysql/conf:/etc/mysql
-e MYSQL_ROOT_PASSWORD=root
-d mysql:5.7
显示一个很长的id,就说明mysql的docker container安装好了
-docker ps查看当前所有的容器
-docker ps -a查看所有的容器
2.2.2配置mysql config文件
[root@localhost vagrant]# cd /mydata/
[root@localhost mydata]# ls
mysql
[root@localhost mydata]# cd mysql/
[root@localhost mysql]# ls
conf data log
[root@localhost mysql]#cd conf/
[root@localhost conf]#ls
[root@localhost conf]#vi myf
(粘贴配置文件中编码信息)
-i (insert mode)
(paste)
-esc(esc the insert mode)
:wq (save and exit)
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=‘SET collation_connection = utf8_unicode_ci’
init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
[root@localhost conf]# ls
myf
[root@localhost conf]# docker restart mysql
mysql
[root@localhost conf]# docker exec -it mysql /bin/bash
root@a354f1646445:/# cd /etc/mysql/
root@a354f1646445:/etc/mysql# ls
myf
root@cf5e62ba0b3f:/etc/mysql# cat myf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect=‘SET collation_connection = utf8_unicode_ci’
init_connect=‘SET NAMES utf8’
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
root@cf5e62ba0b3f:/etc/mysql#
(mysql container配置结束)
几个简单的vagrant指令
vagrant up启动虚拟机
vagrant ssh连接虚拟机
su root切至根用户
密码vagrant
docker pull [app]:[version]
docker images查看所有镜像
docker ps查看所有进程
docker stop [container_ID]停止指定container
docker rm [container_ID]移除指定container
exit;退出容器回到linux主系统
docker run --rm [image_name]移除指定image
docker exec -it mysql /bin/bash 访问容器内部(每一个容器里面都是一个linux系统, 在容器内部可以进行各种命令操作, 退出容器回到linux主系统,exit即可)
2.2.2数据库sqlyog可视化
下载sqlyog软件
配置如下,即可连接docker容器中的mysql,进行可视化操作:
输入虚拟机的ip地址
-test connection
-connect
2.2.3移除
移除container
remove一个container,先stop,再remove:
[root@localhost vagrant]#
docker stop c545ee27e346
[root@localhost vagrant]#
docker rm c545ee27e346
在删除完容器后,还要手动将本地的关于容器的配置目录给删掉:
[root@localhost vagrant]#
rm -rf /mydata/mysql
移除image:
[root@localhost vagrant]#
docker image rm f07dfa83b528 -f
2.3redis
2.3.1
docker安装redis
[root@localhost vagrant]# docker pull redis
[root@localhost vagrant]# mkdir -p /mydata/redis/conf
[root@localhost vagrant]# cd /mydata/
[root@localhost mydata]# ls
mysql redis
[root@localhost mydata]# cd redis/
[root@localhost redis]# ls
conf
[root@localhost redis]# cd conf/
[root@localhost conf]# f
[root@localhost conf]#
docker run -p 6379:6379 --name redis
-v ~/redis/data:/data
-v ~/redis/f:/etc/f
-d redis redis-server /etc/f
68f4a1c73800d518d3cc6571e016147ff197218a43d35c132e531611803111b9
[root@localhost conf]# docker ps
[root@localhost conf]#
docker exec -it redis redis-cli
上行指令执行了redis客户端
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> get a
““b””"
(redis 设置完成)
实现持久化:先输入pwd,再编辑f 加入:appendonly yes
127.0.0.1:6379>
exit
[root@localhost conf]#
pwd
/mydata/redis/conf
[root@localhost conf]#
ls
f
(insert: appendonly yes)
[root@localhost conf]#
docker restart redis
[root@localhost conf]#
docker exec -it redis redis-cli
127.0.0.1:6379> set elsa huang
OK
127.0.0.1:6379> get elsa
“huang”
127.0.0.1:6379> exit
[root@localhost conf]# docker restart redis
redis
[root@localhost conf]# docker ps
[root@localhost conf]# docker exec -it redis redis-cli
127.0.0.1:6379> get elsa
“huang”
(持久化成功)
2.3.2redis可视化
redisDataManager(RDM)

tablePrefix=ums_
server:port: 80# mysql
spring:datasource:type: com.alibaba.druid.pool.DruidDataSource#MySQL配置driverClassName: sql.cj.jdbc.Driverurl: jdbc:mysql://192.168.56.10:3306/gulimall_ums?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: rootpassword: root
application main function跑起来,就在renren-fast代码生成器可视化端口看到了逆向生成的crud代码!
选择所有的代码,下载并复制main文件夹,替代原有的文件夹。
生成代码后,发现有不少标红的地方:进入第六点,配置mybatisX。
新建一个gulimall-common
装下多个模块需要的公共组件
从renren-fast中拷贝以下写好的utils到gulimall-common下的utils包中:
R
Query
PageUtils
Constant
RRException
从renren-fast中拷贝以下写好的xxs到gulimall-common下的
xxs包中:
HTMLFilter
SQLFilter
然后把common组件,加入到各个module中:
<dependency><groupId>com.atguigu.gulimall</groupId><artifactId>gulimall-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
在common的配置pom文件中安装>mybatis-plus,lombok,httpcore,servlet-api,mysql-connector,commons-lang等依赖:
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.12</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version><scope>compile</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.22</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><scope>provided</scope></dependency>
provided表示打包的时候,不打进去。
六.整合mybatisX
6.1.导入依赖
com.baomidou
mybatis-plus-boot-starter
3.3.1
6.2.配置
6.2.1配置数据库源
1》导入数据源驱动
2》在gulimall-product – l配置数据源相关信息
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.10/gulimall_smsdriver-class-name: sql.jdbc.Driver
mybatis-plus:mapper-locations: classpath:/mapper/**/*.xml
# 自己类路径下的mapper中的所有xml文件
# classpath*:/mapper/**/*.xml 所有依赖的jar包中的xml文件global-config:db-config:id-type: auto
# 组件自增,id可以自增
6.2.2配置mybatisX in Common module:
1》使用@MapperScan
@MapperScan(“com.upon.dao”)
2》告诉mybatisX映射文件位置
mybatis-plus:
mapper-location: classpath:/mapper//.xml
(自己类路径下的mapper中的所有xml文件)
(classpath:/mapper//*.xml :所有依赖的jar包中的xml文件)
6.3将来使用shiro时再配置相关,当前先在renren-generator中,把相关注解comment掉。保证逆向生成的代码中,不会有这部分:
//@RequiresPermissions(" m o d u l e N a m e : {moduleName}: moduleName:{pathName}:info")
//@RequiresPermissions……
6.4测试
测试1:
package com.atguigu.gulimall.product;@SpringBootTest
class GulimallProductApplicationTests {@AutowiredBrandService brandService;@Testvoid contextLoads() {BrandEntity brandEntity = new BrandEntity();brandEntity.setName("huawei2021");brandService.save(brandEntity);System.out.println("save成功啦!");}
}
测试结果:
!!!端口占用,杀死线程
1.在开始-运行-cmd,输入:netstat –ano 可以查看所有进程
如:查询占用了8080端口的进程:netstat -ano|findstr “8080”
2.taskkill /pid 7136 -t -f
7.逆向生成所有crud代码
=19
打开localhost/#generator.html
将main文件夹拷贝、替换每个module中原有的main文件夹。
给每一个模块的pom中引入
注意:检查每一个模块中,
GulimalllProductApplication.java这个文件需要保留
<dependency><groupId>com.atguigu.gulimall</groupId><artifactId>gulimall-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.10/gulimall_pmsdriver-class-name: sql.jdbc.Driver
mybatis-plus:mapper-locations: classpath:/mapper/**/*.xml# 自己类路径下的mapper中的所有xml文件# classpath*:/mapper/**/*.xml 所有依赖的jar包中的xml文件global-config:db-config:id-type: auto
# 组件自增,id可以自增server:port: 7000
5个不同的application,分配好不同端口:
7000,8000,9000,10000,11000
测试运行任意api / endpoint:
localhost:11000/ware/ware/list
8.SpringCloud Alibaba[难点]
=20
SpringCloud部分组件停止更新,复杂
SpringCloud Alibaba设计合理,还有人性化的可视化界面
.html
8.1在common的pom文件中配置nacos:
当前推荐的是1.3.1(但是也用不了)
.3.1
<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<!-- <version>2.2.1.RELEASE</version>--></dependency></dependencies>
<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
8.2下载server
Nacos-注册中心
下载1.2.1终于可以启动了! /
双击conf文件夹中的startup文件:
8.3添加内容到相应模块的l 配置文件中
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.10:3306/gulimall_ums?serverTimezone=UTCdriver-class-name: sql.cj.jdbc.Drivercloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-membermybatis-plus:mapper-locations: classpath*:/mapper/**/*.xmlglobal-config:db-config:id-type: auto
server:port: 8000
8.4添加@EnableDiscoveryClient到
GulimallMemberApplication.java 启动类
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {public static void main(String[] args) {SpringApplication.run(GulimallMemberApplication.class, args);}
}
8.5打开127.0.0.1:8848/nacos查看可视化客户端
用户名:nacos
密码:nacos
8.6 给服务起名字:
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.56.10/gulimall_smsdriver-class-name: sql.jdbc.Drivercloud:nacos:discovery:server-addr: 127.0.0.1:8848application:name: gulimall-coupon
run nacos:添加链接描述
启动后server的名字出现在nacos注册中心中:
看到module server名字出现在server list中
注册就完成了!
剩下几个modules,就请重复8.3和8.4
8.7番外:如果nacos启动出错:尝试用standalone模式run nacos
standalone mode:
C:Users45058Downloadsnacosnacosbin&d -m standalone
如果出错,查询:
tail -f
如果端口被占用
kill -9 [pid]
9.open-feign【没成功】
=22
想要远程调用别的服务
9.1.引入open-feign
例子:
在coupon的controller中写入
@RequestMapping("/user/list")public R usercoupons(){CouponEntity couponEntity=new CouponEntity();couponEntity.setCouponName("满100减10");return R.ok().put("coupons",Arrays.asList(couponEntity));}
9.2.编写一个接口,告诉SpringCloud这个接口需要调用远程服务
例如,user需要调用coupon的服务
在user中check是否有open-feign的依赖
在user中创一个feign的包
包里写一个CouponFeignService的接口
package com.atguigu.gulimall.user.feign;import com.atguigumon.utils.R;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;@FeignClient("gulimall-coupon")public interface CouponFeignService {@RequestMapping("/coupon/coupon/user/list")public R usercoupons();
}
路径写全!
声明接口的每一个方法,都是调用哪个远程服务的哪个请求。
9.3.@EnableFeignClients开启远程调用功能:
@EnableFeignClients(basePackages = "com.atguigu.gulimall.user.feign")
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallUserApplication {
}
9.4.测试:
在coupon的UserController里下写一个test
@Autowired
CouponFeignService couponFeignService;@RequestMapping("/coupons")
public R test(){UserEntity userEntity=new UserEntity();userEntity.setNickname("Zhangsan");R usercoupons=couponFeignService.usercoupons();return R.ok().put("user",userEntity).put("coupons",("coupons"));
}
localhost:8000/member/user/coupons
应该没有出现coupon信息,说明openFeign设置有问题。
member call coupon的过程哪里出错了?
localhost:7000/coupon/coupon/user/list
出现了coupon信息:
{“msg”:“success”,“code”:0,“coupons”:[{“id”:null,“couponType”:null,“couponImg”:null,“couponName”:“满100减10”,“num”:null,“amount”:null,“perLimit”:null,“minPoint”:null,“startTime”:null,“endTime”:null,“useType”:null,“note”:null,“publishCount”:null,“useCount”:null,“receiveCount”:null,“enableStartTime”:null,“enableEndTime”:null,“code”:null,“memberLevel”:null,“publish”:null}]}
localhost:7000/coupon/coupon/test
{“msg”:“success”,“code”:0,“name”:“zhangsan”,“age”:18}
参考文章:配置open feign
/
踩坑:一直报错:
Error creating bean with name ‘com.atguigu.gulimall.user.feign.CouponFeignService’:
FactoryBean threw exception on object creation;
nested exception is java.lang.IllegalStateException:
No Feign Client for loadBalancing defined.
Did you forget to include spring-cloud-starter-loadbalancer?
怎么解决?有人建议降低boot和cloud的版本号,在哪里降?如何降?
cloud nacos配置中心:
=23
spring_cloud_alibaba_nacos_config
10.1
给common中添加依赖
<!--config center--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>
10.2
在任意一个module中,添加静态文件bootstrap.properties
spring.application.name=gulimall-coupon
spring.fig.server-addr=127.0.0.1:8848
gulimall-coupon是当前的模块名
127.0.0.1:8848表示本机的8848端口
application.properties中写上:
user.name=zhangsan
user.age=18
10.2.2测试:
public class CouponController {
//++@Value("${user.name}")private String name;@Value("${user.age}")private Integer age;@RequestMapping("/test")public R test(){return R.ok().put("name", name).put("age",age);}
run起来!发现这里显示了系统名,
{“msg”:“success”,“code”:0,“name”:“45058”,“age”:18}
而没有显示指定的zhangsan:
修改成专门针对coupon这个module的变量名:
application.properties中改为:
coupon.user.name=zhangsan
coupon.user.age=18
CouponController中改为
public class CouponController {
//++@Value("${coupon.user.name}")private String name;@Value("${coupon.user.age}")private Integer age;@RequestMapping("/test")public R test(){return R.ok().put("name", name).put("age",age);}
结果:{“msg”:“success”,“code”:0,“name”:“zhangsan”,“age”:18}
但是,如果已经部署,每次还要修改properties文件,十分麻烦。这就需要Nacos作为配置中心,进行自动的配置,批量的修改。
10.3使用Nacos实现统一管理配置:
10.3.1配置中心中添加一个数据集data Id
查看console中的信息,发现“gullimall-coupon.properties”这个默认配置文件名。
在Nacos中的configurations,点击右侧+加号新建一个“gullimall-coupon.properties
10.4给gullimall-coupon.properties填写内容:
coupon.user.name=zhangsan
coupon.user.age=25
点击publish
10.5动态获取配置
在CouponController内添加@RefreshScope,重启CouponApplication,刷新localhost:7000/coupon/coupon/test查看结果,如果已经改变,说明配置成功。
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
------1/6/2021
------6/27/2021重启项目-------
=24
name space prod + 11.11 group
uuid + 1111
isolate according to environment, and group
加载多个配置集
分组进行配置管理
写上.properties
.yml
api gateway
route request to healthy server/machine to handle
-route
-predicate (before,after,btw, cookie, header,method,host, path,query, etc)
-filter (addrequestheader, addrequestpara, etc)
check/predicate =true------>route to a server / ----->route to b server
spring:cloud:gateway:routes:- id: test_routeuri: :- Query: url,baidu- id: qq_routeuri: :- Query: url,qq
如果url中输入baidu,就跳转到
任务1:查询一级分类:
在这里插入代码片
番外:
kill process in Mac
##一、查看指定端口的进程
sudo lsof -i :27017
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
[mongod] 859 zhangsan 313u IPv6 0x1111111111111 0t0 TCP *:cslistener (LISTEN)
ps -ef | grep nginx
501 17780 1 0 8:36下午 ?? 0:00.00 nginx: master process nginx
501 17781 17780 0 8:36下午 ?? 0:00.00 nginx: worker process
501 17790 14611 0 8:39下午 ttys004 0:00.00 grep nginx
然后根据PID杀进程:
sudo kill -9 859
本文发布于:2024-03-10 04:59:15,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1710346195137876.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |