gulimall-coupon
对应的数据库表是gulimall_sms,更改一下数据库名,模块名,运行,生成代码,替换main
并在coupon--pom.xml文件中引入common依赖。
删除掉resources下的src
新建application.yml文件,配置数据库源
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
server:
port: 7000
运行起来,看能否跑通。
之后每个模块都类似。
会员模块gulimall_member--- gulimall_ums,表前缀是ums
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_ums
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
server:
port: 8000 #记得更改端口号
order模块 ----gulimall_oms
#模块名 moduleName=order
#表前缀 tablePrefix=oms_
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_oms
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
server:
port: 9000
ware ---gulimall_wms,重复上面的步骤
spring-cloud-alibaba
https://github.com/alibaba/spring-cloud-alibaba
点击中文文档可以查看注册中心和配置中心的使用例子
每个模块添加nacos服务中心
在启动类添加@EnableDiscoveryClient注解
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms
driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册nacos发现
application:
name: gulimall-coupon #注册服务
mybatis-plus:
mapper-locations: classpath:/mapper/**/*.xml
global-config:
db-config:
id-type: auto
server:
port: 7000
先启动nacos服务,访问http://localhost:8848/nacos
用户名和密码:nacos
假如会员服务调用优惠券服务,会员想要查看当前的会员领取到的所有优惠券,会员服务会先去注册中心,查找优惠券服务都在哪些信息服务器,会挑一台含有优惠券的服务器并返回信息给会员服务。会员服务发出请求给优惠券服务的服务器,优惠券服务响应信息会给会员服务。
使用远程调用--feign
* 1、想要远程调用别的服务
* 1)、引入open-feign依赖
* 2)、编写一个接口,告诉SpringCloud这个接口需要调用远程服务
a.声明接口的每一个方法都是调用哪个远程服务的那个请求
* 3)、开启远程调用功能
首先导入依赖,两个模块都有引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
member模块还引入loadbalancer
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
使用 @EnableFeignClients //开启远程调用功能
测试
@RestController
@RequestMapping("member/member")
public class MemberController {
@Autowired
private MemberService memberService;
@Autowired
CouponFeignService couponFeignService;
//测试会员的所有优惠券
@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R memebercoupons = couponFeignService.memebercoupons();
return R.ok().put("member",memberEntity).put("coupons",memebercoupons.get("coupons"));
}
测试路径: localhost:8000/member/member/coupons
使用nacos配置中心
首先,修改 pom.xml 文件,引入 Nacos Config Starter。在common的pom.xml文件中加入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据,在coupon模块中添加,bootstrap.properties优先于application先加载。
别给bootstrap.properties添加#的注释,会使实时配置失效,最后面也不能含有空格
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=gulimall-coupon #当前模块名称
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #指定nacos配置中心的地址
在application.properties中配置了
coupon.user.name=zhangsan
coupon.user.age=18
测试
@RefreshScope //动态刷新
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private int age;
//测试配置中心
@RequestMapping("/test")
public R test(){
return R.ok().put("name",name).put("age",age);
}
在nacos的配置列表中添加可以实时显示配置的信息并发布,刷新页面会出现以下配置的值,Data ID的名称得是模块名.properties
在common的pom.xml中加入bookstrap依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.1.3</version>
</dependency>
配置中心的配置优于文件配置
1)、命名空间:配置隔离;
* 默认:public(保留空间);默认新增的所有配置都在public空间。
* 1、开发,测试,生产:利用命名空间来做环境隔离。
* 注意:在bootstrap.properties配置,需要使用哪个命名空间下的配置,使用以下配置指定。spring.cloud.nacos.config.namespace=命名空间ID
* spring.cloud.nacos.config.namespace=1b56944e-765d-4baf-9deb-f5a2fdc7f6ca
每个模块指定自己的命名空间,使用自己空间下的配置。
* 2、每一个微服务之间互相隔离配置,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
*
* 2)、配置集:所有的配置的集合
*
* 3)、配置集ID:类似文件名。
* Data ID:类似文件名
*
* 4)、配置分组:
* 默认所有的配置集都属于:DEFAULT_GROUP【默认分组名称】;
* 1111,618,1212【命名分组的名称】
*
* 项目中的使用:每个微服务创建自己的命名空间,使用配置分组区分环境,同一个模块的不同开发环境配置dev,test,prod
*
* 3、同时加载多个配置集
* 1)、微服务任何配置信息,任何配置文件都可以放在配置中心中
* 2)、只需要在bootstrap.properties说明加载配置中心中哪些配置文件即可
* 3)、@Value,@ConfigurationProperties。。。
* 以前SpringBoot任何方法从配置文件中获取值,都能使用。
* 配置中心有的优先使用配置中心中的,
同时加载nacos中的多个配置。
比如抽离了多个配置放在dev组中,
在bookstrap.properties
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=89c5cc8a-354b-4984-9e11-9d5958eec5c8
spring.cloud.nacos.config.group=dev
spring.cloud.nacos.config.extension-configs[0].data-id=datasource.yml
spring.cloud.nacos.config.extension-configs[0].group=dev
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.extension-configs[1].data-id=mybatis.yml
spring.cloud.nacos.config.extension-configs[1].group=dev
spring.cloud.nacos.config.extension-configs[1].refresh=true
spring.cloud.nacos.config.extension-configs[2].data-id=other.yml
spring.cloud.nacos.config.extension-configs[2].group=dev
spring.cloud.nacos.config.extension-configs[2].refresh=true
注释掉原本的配置,localhost:7000/coupon/coupon/test ,数据正常出来
网关
路由:客户端发出请求,由网关路由到指定的服务器,只要路由的断言为真就能匹配到相应服务
断言:断言相当于条件判断,设置请求的条件,如设置相应的请求头或参数
过滤器:请求和响应都有过滤
客户端发起请求,经过网关,网关开始使用Gateway Handler Mapping,判断是否能处理,能处理,就交给Gateway Web Handler再次处理,之后经过层层filter,服务器server响应,再经过层层filter,继续沿着原路返回。
新建一个网关模块
在网关模块加入common依赖
application.properties,配置注册发现
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
在bootstrap.properties
配置nacos配置中心
spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=3496b915-96b9-43f6-8370-1336702bae9f
启动类添加启动注册发现客户端功能
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallGatewayApplication.class, args);
}
}
添加网关路由配置
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query= url,baidu
spring: cloud: gateway: routes: - id: 路由id uri: 路由地址 predicates: 断言 - Query= 参数,参数值
访问 http://localhost:88/?url=qq
安装vue
npm install vue-cli -g
搭建脚手架,在桌面创建一个文件夹,进入给目录,在地址栏敲入cmd,