P3 项目结构创建 & 提交到码云 & 数据库初始化 & 逆向工程创建

项目结构创建

功能模块数据库名称服务端口
couponsms7000
memberums8000
orderoms9000
productpms10000
warewms11000

码云新建仓库-----选择.gitignore为maven-----开源许可证为Apache-----生产/开发模型

创建微服务模块

group:com.atguigu.gulimall

artifact: gulimall-product (同步 name)

package: com.atguigu.gulimall.product

导入必要的spring web 和 spring cloud下的openfeign 进行互相调用

创建其他的几个模块

1、父工程的pom.xml文件,模块名 组织名 packaging modules (进行聚合很多模块)

maven 添加pom.xml,发现了root标识

2、修改总项目的gitignore文件

在左下角的unversioned files 未版本控制刷新数量,写

 **/mvnw  **/mvnw .cm **/mvn   **/target  .idea **/.gitignore 

添加到VCS,22个文件

安装gitee插件,commit到本地,取消右边的执行代码分析和检查TODO,commit and push

数据库初始化

数据库字符集选 utf8b4,兼容utf8,并解决字符乱码问题

人人fast 复制进gulimall中,并把fast项目中的.git文件删去,对应的数据库gulimall_admin

application_dev.yml中修改数据库的账号、密码信息

人人fast项目顺利运行

为了前端项目,下载安装node node -v

npm 是nodeJS的包管理工具,类似于maven----java

配置npm使用淘宝镜像

npm config set registry http://registry.npm.taobao.org/

npm install 下载所需的组件

发现报错,解决来源于 码云项目中的issues

谷粒商城 p16 node-sass报错最简单解决方法:
npm install 第一次报错后,再运行
npm install node-sass@npm:sass --ignore-scripts
完了直接npm run dev,成功
python啥的完全不需要

npm run dev

逆向工程搭建使用

下载人人代码生成器,.git文件删去

人人fast,人人生成都加入modules

先生成gulimall-product模块

1、appliation.yml 连接数据库,更改账号、密码

2、generator.properties 更改

包名=com.atguigu.gulimall.product  
moduleName=product   
mainPath=com.atguigu
表前缀=pms_

启动,粘贴main

创建新的maven模块,gulimall-common 继承,不放入module中(聚合)

导入 mybatis-plus-boot-starter 依赖

人人io.util中复制2个类到com.atguigu.common.utils中,重新导入文件引用

org.apache.http.HttpStatus 依赖 httpComponent

人人pom.xml中的commons-lang 还有SQLFilter复制到类,constant,

servelet-api <scope>provided</scope>

shiro 的 @RequirePermissions 注解取消(生成器的template模板中,重新生成)

最后common中是

utils: constant  PageUtils Query R RRException
XSS: HTMLFilter SQLFilter

配置测试微服务基本curd功能

整合mybatis-plus

1、导入依赖 mybatis-plus-boot-starter ;导入数据库驱动 mysql connect

2、在application.yml中配置数据库相关配置

spirng:datasource:    username:root   password:root
url:jdbc:msyql://192.168.56.10:3306/gulimall_pms
dirver_class_name:com.msyql.jdbc.driver

3、main主类中添加注解

@MapperScan("com.atguigu.gulimall.product.dao")

4、告诉mybatis-plus,sql映射文件位置,application.yml中

classpath后面的*标识不止扫描自己的类路径,包括依赖的jar包

mybatis-plus:mapper-locations:classpath*:/mapper/**/*.xml

同时配置主键自增

mybatis-plus:global-config:db-config:id_type:auto

测试

@Autowired BrandService brandService
@Test
public void contextLoads(){
	brandEntity;
	brandEntity.setName();
	brandService.save(brandEntity)
	sout("保存成功")
}

再测一个

List<brandEntity> list = brandService.list(new QueryWrapper<brandEntity>().eq("brand_id",1))
list.forEach(item->{sout(item);})

为了用nacos,在common中引入 spring-cloud-alibaba管理依赖,(github来源),注意跟springboot的版本对应

nacos注册中心

集群指10台机器跑用户服务

分布式指整个商城的订单服务、用户服务等不同模块协调工作

分布式中的每一个节点,都可以做集群,而集群不一定是分布式

**解释:**A服务调用B服务,A服务并不知道B服务当前在哪几台服务器有,哪些是正常的,哪些服务已经下线。解决这个问题可以引入注册中心。服务一上线注册到注册中心。如果某些服务下线,我们其他人可以实时感知到其他服务的状态,从而避免调用不可用的服务。

github—discovery example

1、导入客户端依赖 spring-cloud-starter-alibaba-nacos-discovey

2、在application.properties配置 nacos发现的服务地址,服务名

高版本nacos还要用户名和密码,都为nacos,用于鉴权

spring.cloud.nacos.discovery.server_addr=127.0.0.1:8848
spring.application.name=gulimall-coupon

3、主启动类使用 @EnableDiscoveryClient注解开启服务发现与注册功能

4、下载nacos server(来源是github),运行命令 startup.cmd -m standalone ,默认的是集群cluster模式,改成单机模型

5、输入地址 127.0.0.1:8848/nacos

openfeign远程调用

1、引用 open-feign。

已知在gulimall-coupon Controller中

@RequestMapping("/member/list")
public R memeberCoupons(){
	new CouponEntity;
	setCouponName("满100减10")
	return R.ok().put("coupons",Arrays.asList(couponEntity))
}

2、编写一个接口,告诉springcloud这个接口需要调用远程服务。声明接口的每一个方法都是调用远程服务的哪个请求

在gulimall-member dao 目录同级新建 feign ,新建接口interface(路径名称补全)

@FeignClient("gulimall-coupon")
@RequestMapping("/coupon/coupon/member/list")
public R memeberCoupons();

3、开启远程调用功能。gulimall-member中主启动类,引用包名

@EnableFeignClients(basePackages="com.atguigu.gulimall.member.feign")

4、使用时,membercontroller中,

@Autowired
CouponFeignService couponFeignService;
R c = couponFeignService.memeberCoupons();
return R.ok().put("member",memberEntity).put("coupons",c.get("coupons"))

nacos配置中心

**解释:**每一个服务最终都有大量的配置,并且每个服务都可以部署在多台机器上。

我们需要经常变更配置,可以让每个服务在配置中心获取自己的配置

而配置中心用来集中管理微服务的配置信息。

1、引入客户端依赖 spring-cloud-starter-alibaba-nacos-config

2、新建 bootstrap.properties > application.yml > application.properties

bootstrap.properties配置 nacos的服务地址,服务名

spring.cloud.nacos.config.server_addr=127.0.0.1:8848
spring.application.name=gulimall-coupon

如果报错的话,写用户名、密码等。

ps.bootstrap.properties先获取到nacos配置地址,如果将上面的信息放到 application.properties中,无法读取nacos配置文件。

在coupon模块中,,加入application.properties有user.name=zhangsan

在couponController.java中获取配置的属性值,

@Value("${user.name}")
private String name;
在下面的R.ok().put("name",name)

3、在配置列表新建配置。控制台输出的信息中,要求会获取gulimall_coupon.properties文件。配置格式是.properties

更改后,发现是否会动态改变(观察前端返回的数据)

4、动态获取配置(热更新)。在CouponController类(即value注解所在的类)中加注解@RefreshScope

另一种属性加载方式是:其实现了自动刷新

private string name;
其类上写 @ConfigurationProperties(prefix="user") 约定大于配置

如果配置中心和当前应用的配置文件中都配置了相同的项,优先使用配置中心的配置。

先读配置中心文件,再读项目中的application.properties。

命令空间与配置分组

命令空间,用来隔离配置。默认public。比如,创建dev开发环境,test测试环境,prop生产环境

在bootstrap.properties中可以用 ...config....namespace=uuid 切换命名空间

每一个微服务互相隔离配置,每一个微服务都创建自己的命令空间,只加载自己命名空间下的所有配置。

不同namespace下的服务不可见

比如,coupon,优惠系统。

配置集:所有配置的集合,也就是一个配置文件。

配置ID:类似于文件名,, DataID 文件名

group:分组。如,在生产环境中再分组,不同的活动,618,1212

加载多配置集

如coupon模块,在nacos管理中新建datasource.yml,格式为yaml;mybatis.yml;other.yml

在bootstrap.properties中可以用

spring.cloud.nacos.config.ext=config[0].data_id=
									   .group=
                                       .refresh=    是否动态刷新

网关gateway

类似于common,创建gateway模块,并进行nacos配置中心和注册发现。创建gateway命名空间。

断言表示:如果uri等于baidu,则跳转

spring:cloud:gateway:routes:
							-id:test_route
							 uri:https://www.baidu.com
							 predicates:
							 	-	Query=url,baidu
  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值