1.项目中的依赖
2. SpringCloud Alibaba-Nacos[作为注册中心]
1、首先,修改guli-common中的 pom.xml 文件,引入 Nacos Discovery Starter
<!-- 配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.在application.yml中加入配置
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.10:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: gulimall-coupon #服务名
3.启动nacos;
直接在bin文件中点击startup.cmd
4.然后在启动文件中加入注解:
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallCouponApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallCouponApplication.class, args);
}
}
5.之后游览器输入URL:
127.0.0.1:8848/nacos
6、启动应用,观察nacos服务列表是否已经注册上服务
7.注册更多的服务上去,测试使用feign远程调用
Feign 使用三步
1、导包 openfeign
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、开启@EnableFeignClients 功能
@EnableFeignClients(basePackages = "com.atguigu.gulimall.member.feign") //去扫描这个包
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallMemberApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallMemberApplication.class, args);
}
}
3、编写接口,进行远程调用
/*
这是一个声明式的远程调用,调用nacos注册的gulimall-coupon这个服务的coupon/coupon/member/list这个映射
*/
@FeignClient("gulimall-coupon")
public interface CouponFeignService {
@RequestMapping("coupon/coupon/member/list")
public R membercoupons();
}
4.本地映射方法
//远程调用其他服务,启动后URL输入localhost:8000/member/member/coupons 会调用couponFeignService.membercoupons(); 接口
@RequestMapping("/member/member/coupons")
public R test(){
MemberEntity memberEntity = new MemberEntity();
memberEntity.setNickname("张三");
R membercoupons = couponFeignService.membercoupons();
// membercoupons.get("");
return R.ok().put("member",memberEntity).put("coupons",membercoupons.get("coupons"));
}
3、SpringCloud Alibaba-Nacos[作为配置中心]
1、guli-commom 中pom.xml 引入 Nacos Config Starter
<!-- 配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、在应用的 /src/main/resources/bootstrap.properties 配置文件中配置 Nacos Config 元数据
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848 主要配置应用名和配置中心地址
3.需要给配置中心默认添加一个数据集 gulimall-coupon.properties 默认规则:应用名.properties
4.给应用名.properties添加任何配置
conpon.user.name=zhangsan
conpon.user.age=18
5.动态获取配置,添加注解 @RefreshScope
//如果配置中心和当前应用中心都配置了相同的项,优先选择配置中心中的,
@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
@Autowired
private CouponService couponService;
//@Value("${配置项的名}")
@Value("${coupon.user.name}")
private String name;
@Value("${coupon.user.age}") //直接取出配置文件中的参数
private String age;
@RequestMapping("/test1")
public R test(){
return R.ok().put("name",name).put("age",age);
}
进阶:
1.命名空间:配置隔离
默认:public(保留空间);默认新增的所有配置都在public空间
1)开发,测试,生产:利用命名空间来做环境隔离
注意:在 bootstrap.properties配置上需要使用哪个命名空间:
spring.cloud.nacos.config.namespace=1eacbb04-ae05-4d37-af2f-1f843b20d1e
2)每一个微服务之间互相隔离,每一个微服务都创建自己的命名空间,只加载自己命名空间下的所有配置
2、配置集:所有配置的集合
3、配置集ID:相当于配置文件名
4、配置分组:默认所有的配置集都属于:DEFAULT_GROUP;
配置文件:bootstrap.properties中内容
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=329e62fd-7478-4fd8-97e4-4b6544e49af1
spring.cloud.nacos.config.group=dev //该服务配置分组选择哪一个
5、同时加载多个配置集:
1)微服务任何配置信息,任何配置文件都可以放在配置中心中
2)只需要在 bootstrap.properties 说明加载配置中心中哪些文件即可
spring.application.name=gulimall-coupon
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#命名空间
spring.cloud.nacos.config.namespace=329e62fd-7478-4fd8-97e4-4b6544e49af1
#配置分组
spring.cloud.nacos.config.group=prop
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml
spring.cloud.nacos.config.ext-config[0].group=dev
spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml
spring.cloud.nacos.config.ext-config[1].group=dev
spring.cloud.nacos.config.ext-config[1].refresh=true
3)@Value,@ConfigurationProperties。。。 以前SpringBoot任何方法都可以获取值,都能使用
配置中心中配置的优先使用配置中心中的