创建五个模块
1、gulimall-member(会员模块)
2、gulimall-order(订单模块)
3、gulimal-product(商品服务模块)
4、gulimall-ware(仓储服务模块)
5、gulimall-coupon(优惠卷模块)
引入spring-web和openfeign的依赖
整合MybatisPlus
1、导入数据源
2、配置
1、配置数据源:
(1)、导入数据库的驱动
(2)、在application.yml配置数据源相关信息
2、配置MyBatis-Plus
使用@MapperScan
告诉Mybatis-Plus,Sql映射文件的位置
mybatis-plus:
config-location: classpath:/mapper/**/*.xml
eg:
spring:
datasource:
username: root
password: "20020630"
url: jdbc:mysql://192.168.205.128:3306/gulimall_wms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
config-locations: classpath:/mapper/**/*.xml
#统一配置id主键自增
global-config:
db-config:
id-type: auto
利用逆向工程生成相关代码
进行相关接口测试
common模块导入alibaba.cloud
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.5.RELEASE
导入nacos依赖
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
2.2.5.RELEASE
添加配置
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
#服务名称
application:
name: gulimall-coupon
使用注解开启服务控制与发现
在微服务模块的启动类上
@EnableDiscoveryClient
已经注册到nacos中
将其他模块的微服务用同样的方法都注册到nacos中
测试:使得member(会员)模块能远程调用coupon模块(优惠卷)
在优惠卷模块的contoller中添加一个查询优惠卷的方法
在member模块的pom文件下添加远程调用依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
@RequestMapping("/member/list")
public R memberCoupons(){
//使用假数据模拟
CouponEntity coupon=new CouponEntity();
coupon.setCouponName("满100减20");
return R.ok().put("coupons",coupon);
}
想要在会员模块远程调用这个方法
创建一个接口放在feign包下
使用@FeignClien指明要调用的服务名称
//注册中心中coupon的服务名
@FeignClient("gulimall-coupon")
public interface CouponFeinService {
//注意:这里要填路径全称
@RequestMapping("coupon/coupon/member/list")
public R memberCoupons();
}
开启远程调用
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
在contoller中添加一个测试方法
@Autowired
private CouponFeinService couponFeinService;
//远程调用优惠卷服务
@RequestMapping("/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R r = couponFeinService.memberCoupons();
return R.ok().put("member",memberEntity).put("coupons",r.get("coupons"));
}
新版的spring-boot需要loadbalancer进行负载均衡
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.5.RELEASE</version> <!--不使用ribbon进行客户端负载均衡--> <exclusions> <exclusion> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </exclusion> </exclusions> </dependency> <!-- 使用loadbalancer进行客户端负载均衡--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> <version>2.2.7.RELEASE</version> </dependency>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
访问地址http://localhost:8000/member/member/coupons
在common包下导入
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
<version>2.2.5.RELEASEversion>
dependency>
测试:
在coupon模块下创建bootstrap.properties(这个配置文件加载的优先级最高)
spring:
application:
name: gulimall-coupon
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
在本地resource创建application.properties
自定义两个数据
coupon.user.name=zhangsan
coupon.user.age=18
在controller中获取application配置文件中的内容
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}")
private String age;
@RequestMapping("/test")
public R test(){
return R.ok().put("name",name).put("age",age);
}
访问localhost:7000/coupon/coupon/test
这样在工程中加载配置文件,修改起来非常麻烦
所有使用nacos管理配置文件
在nacos中创建一个配置文件gulimall-coupon
由于我的spring-boot版本高
需要导入
org.springframework.cloud spring-cloud-starter-bootstrap 3.1.3
- 1
- 2
- 3
- 4
- 5
使用@RefreshScope注解开启动态更新配置文件
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#配置命名空间为gulimall-coupon
namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#配置命名空间为gulimall-coupon
namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
#设置分组为dev环境
group: dev
微服务的任何配置信息,任何配置文件都可以放在配置中心中
将原来的applciation.yml
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
datasource:
username: root
password: "20020630"
url: jdbc:mysql://192.168.205.128:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
config-locations: classpath:/mapper/**/*.xml
#统一配置id主键自增
global-config:
db-config:
id-type: auto
server:
port: 7000
拆分出来
mybatis.yml
mybatis-plus:
config-locations: classpath:/mapper/**/*.xml
#统一配置id主键自增
global-config:
db-config:
id-type: auto
datasource.yml
spring:
datasource:
username: root
password: "20020630"
url: jdbc:mysql://192.168.205.128:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
other.yml
server:
port: 7000
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon
修改bootstrap.yml使用 extension-configs同时加载多个配置文件
spring:
application:
name: gulimall-coupon
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
#配置命名空间为gulimall-coupon
namespace: 56b83f9e-eb52-4b48-b0ad-c31a3a46e709
#设置分组为dev环境
extension-configs:
- data-id: datasource.yml
group: dev
refresh: true #热更新
- data-id: mybatis.yml
group: dev
refresh: true
- data-id: other.yml
group: dev
refresh: true
- data-id: gulimall-coupon.properties
group: dev
refresh: true
创建一个model名字为gulimall-gateway继承gulimall-common模块
引入gateway依赖
将gulimall-gateway添加到nacos注册中心中
spring:
application:
name: gulimall-gateway
cloud:
nacos:
config:
server-addr: 127.0.0.1
name: gulimall-gateway
server:
port: 88
在启动类上开启服务发现
@EnableDiscoveryClient
启动测试:
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.
这是因为gulimall-gate中引入了mybatis的依赖
没有配置数据源导致报错
在启动类上添加排除即可
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
给网关添加一个断言
gateway:
routes:
- id: test_route
uri: https://www.baidu.com/
predicates:
- Query=url,baidu
当访问的参数url=baidu的时候会自动跳转到https://www.baidu.com/
测试:
http://localhost:88/?url=baidu