商城2 整合springcloud
- springCloud网址 https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html
- 注册发现:引入依赖到common,这样别的模块不用引了
<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><dependency> <groupId> com.alibaba.cloud </groupId> <artifactId> spring-cloud-starter-alibaba-nacos-discovery </artifactId> </dependency>
- 启动nocas ,下载网址 https://github.com/alibaba/nacos/releases
- 第一步在application.yml中的spring节点下加入
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon - 第二步在启动类加注解,启动程序,访问127.0.0.1:8848/nacos
@EnableDiscoveryClient
- 远程调用OpenFeign,1.在调用端的pom引入feign的依赖
<dependency> <groupId> org.springframework.cloud </groupId> <artifactId> spring-cloud-starter-openfeign </artifactId> </dependency>
2.在被调用端写一个接口,供调用端调用
@RequestMapping("/member/list") public R membercoupons(){ CouponEntity couponEntity = new CouponEntity(); couponEntity.setCouponName("满100减10"); return R.ok().put("coupons",Arrays.asList(couponEntity)); }
3.在调用端建feign包,建接口,要写被调用端接口的全路径
@FeignClient("gulimall-coupon") public interface CouponFeignService { @RequestMapping("/coupon/coupon/member/list") public R membercoupons(); }
4.在调用端启动类加注解,并配上新建的feign包的全路径@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign")
-
在调用端的controller,加接口,引入feign包的service
@Autowired private CouponFeignService couponFeignService; @RequestMapping("/coupons") public R test(){ MemberEntity memberEntity = new MemberEntity(); memberEntity.setNickname("张三"); R membercoupons = couponFeignService.membercoupons(); return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons")); }
- 测试 http://localhost:8000/member/member/coupons
- 配置中心 https://github.com/alibaba/spring-cloud-alibaba 找到中文文档 https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md 演示demo 下的 nacos config example https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/readme-zh.md
- 引入依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
- 在resources下创建文件
-
在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据
spring.application.name=nacos-config-example(模块名) spring.cloud.nacos.config.server-addr=127.0.0.1:8848
2. 测试从配置文件中获取值 (1) 在application.properties 中
user.name=org user.age=18
(2) 在controller 中
@Value("${a.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); }
(3)测试 http://localhost:7000/coupon/coupon/test
- 动态刷新配置文件 新建一个配置列表
-
在controller类上加注解
@RefreshScope //动态获取并刷新配置
- 编辑新建的配置列表
- 再次测试 http://localhost:7000/coupon/coupon/test 看看数据有无变化
-
- 配置中心细节 命名空间 配置集 配置集ID 配置分组
- 命名空间 默认public 可以新建几个
- 在配置列表的prop下也建一个 gulimall-coupon.properties 配置,要想让程序切换到prop的配置列表,在程序的 bootstrap.properties中
spring.cloud.nacos.config.namespace=命名空间ID
spring.cloud.nacos.config.group= (分组名,可不填默认例如pring.cloud.nacos.config.group=dev)
- 网关 新建getway模块 1.在启动类加注解 开启注册发现 @EnableDiscoveryClient 2.在application.properties中
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-getway
server.port=88 - 在nacos中新建getway命名空间 在配置列表找到getway 新建配置 gulimall-getway.yml ,内容:
spring:application:name: gulimall-getway在新建bootstrap.properties 文件:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=a5b31ef3-81e0-4036-9582-1b6fa96f97a1 #新建的配置的ID
由于getway没有链接数据库 在启动类的 注解加 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
启动程序
在新建application.yml 内容spring: cloud: gateway: routes: - id: test_route uri: https://www.baidu.com predicates: - Query=url,baidu - id: qq_route uri: https://www.qq.com predicates: - Query=url,qq
http://localhost:88/hello?url=baidu
-
在gulimall-getway的application.yml里面加入断言
- id: product_route uri: lb://gulimall-product predicates: - Path=/api/product/** filters: - RewritePath=/api/(?<segment>.*),/$\{segment}
在nacos上 新建命名空间 product 描述:商品服务
在gulimall-product的resources下 新建 bootstrap.properties
spring.application.name=gulimall-product spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=16deb817-723f-4e6c-9bf7-2c0e0f64f4f9 #命名空间ID
在nacos上 新建配置列表 gulimall-product.yml 描述:商品服务
注册到nacos,在gulimall-product的resources下的application.yml 加入
spring: datasource: username: root password: root url: jdbc:mysql://192.168.56.10:3306/gulimall_pms driver-class-name: com.mysql.jdbc.Driver cloud: nacos: discovery: server-addr: 127.0.0.1:8848 application: name: gulimall-product
在启动类上加注解 @EnableDiscoveryClient 测试 http://localhost:88/api/product/category/list/tree
- 在renren-fast的pom下加入
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency> -
在application.yml下加入
application:
name: renren-fast
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 - 在启动类加注解
@EnableDiscoveryClient
- 在renren-fast的pom下加入