《SpringCloud超级入门(1),缓存+一致性哈希+分布式面试题

本文介绍了一个SpringCloud应用的配置和使用,包括UserAutoConfigure的启用,使用UserClient获取用户信息,以及通过条件注解@ConditionalOnProperty实现用户服务的条件化加载。在面试中,这些内容涉及到缓存机制、一致性哈希和分布式系统的设计。
摘要由CSDN通过智能技术生成

@EnableConfigurationProperties(UserPorperties.class)

public class UserAutoConfigure {

@Bean

@ConditionalOnProperty(prefix = "spring.user", value = "enabled", havingValue = "true")

public UserClient userClient(UserPorperties userPorperties) {

    return new UserClient(userPorperties);

}

}




Spring Boot 会默认扫描跟启动类平级的包,假如我们的 Starter 跟启动类不在同一个主包下,如何能让 UserAutoConfigure 生效?  

  

在 resources 下创建一个 META-INF 文件夹,然后在 META-INF 文件夹中创建一个 spring.factories 文件,文件中指定自动配置的类:



org.springframework.boot.autoconfigure.EnableAutoConfiguration=\

com.cxytiandi.demo.UserAutoConfigure




Spring Boot 启动时会去读取 spring.factories 文件,然后根据配置激活对应的配置类,至此一个简单的 Starter 包就实现了。



使用 Starter

----------



现在可以在其他的项目中引入这个 Starter 包,代码如下所示。



com.cxytiandi

spring-boot-starter-demo

0.0.1-SNAPSHOT




引入之后就直接可以使用 UserClient,UserClient 在项目启动的时候已经自动初始化好,代码如下所示。



@RestController

public class UserController {

@Autowired

private UserClient userClient;

@GetMapping("/user/name")

public String getUserName() {

return userClient.getName();

}

}




属性文件中配置 name 的值和开启 UserClient:



spring.user.name=zhangsan

spring.user.enabled=true




访问 /user/name 就可以返回我们配置的 zhangsan。



使用注解开启 Starter 自动构建

-------------------



很多时候我们不想在引入 Starter 包时就执行初始化的逻辑,而是想要由用户来指定是否要开启 Starter 包的自动配置功能,比如常用的 @EnableAsync 这个注解就是用于开启调用方法异步执行的功能。  

  

同样地,我们也可以通过注解的方式来开启是否自动配置,如果用注解的方式,那么 spring.factories 就不需要编写了,下面就来看一下怎么定义启用自动配置的注解,代码如下所示。



@Target({ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Inherited

@Import({UserAutoConfigure.class})

public @interface EnableUserClient {

}




这段代码的核心是 @Import({UserAutoConfigure.class}),通过导入的方式实现把 UserAutoConfigure 实例加入 SpringIOC 容器中,这样就能开启自动配置了。  

  

使用方式就是在启动类上加上该注解,代码如下所示。



@SpringBootApplication

public class SpringBootDemoApplication {

public static void main(String[] args) {

SpringApplication.run(SpringBootDemoApplication.class, args);

}

}




使用配置开启 Starter 自动构建

-------------------



在某些场景下,UserAutoConfigure 中会配置多个对象,对于这些对象,如果不想全部配置,或是想让用户指定需要开启配置的时候再去构建对象,这个时候我们可以通过 @ConditionalOnProperty 来指定是否开启配置的功能,代码如下所示。



@Bean

@ConditionalOnProperty(prefix = “spring.user”,value = “enabled”,havingValue = “true”)

public UserClient userClient(UserPorperties userPorperties) {

return new UserClient(userPorperties);

}




通过上面的配置,只有当启动类加了 @EnableUserClient 并且配置文件中 spring.user.enabled=true 的时候才会自动配置 UserClient。



配置 Starter 内容提示

---------------



在自定义 Starter 包的过程中,还有一点比较重要,就是对配置的内容项进行提示,需要注意的是,Eclipse 中是不支持提示的,Spring Tools 4 for Eclipse 中可以提示。  

  

定义提示内容需要在 META-INF 中创建一个 spring-configuration-metadata.json 文件,代码如下所示。



{ “properties”: [ { “name”: “spring.user.name”, “defaultValue”: “cxytinadi” }, { “name”: “spring.user.enabled”, “type”: “java.lang.Boolean”, “defaultValue”: false } ] }




*   name:配置名

*   type:配置的数据类型

*   defaultValue:默认值



[上一篇《SpringCloud超级入门》Spring Boot项目搭建步骤(超详细)《六》](https://gitee.com/vip204888/java-p7)



[下一篇 介绍Spring Cloud Eureka是什么](https://gitee.com/vip204888/java-p7) 



相关springboot实战项目推荐

------------------



[基于java ssm springboot+VUE疫情防疫系统系统前后端分离设计和实现](https://gitee.com/vip204888/java-p7)



[基于java springboot+mybatis电影售票网站管理系统前台+后台设计和实现](https://gitee.com/vip204888/java-p7)



[基于java ssm springboot+mybatis酒庄内部管理系统设计和实现](https://gitee.com/vip204888/java-p7)



[基于JAVA springboot+mybatis智慧生活分享平台设计和实现](https://gitee.com/vip204888/java-p7)



[基于Java springboot+vue+redis前后端分离家具商城平台系统设计和实现](https://gitee.com/vip204888/java-p7)



[基于JAVA SSM springboot实现的抗疫物质信息管理系统设计和实现](https://gitee.com/vip204888/java-p7)


### 最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

![image](https://img-blog.csdnimg.cn/img_convert/71c66b69368bfa3e649a570fcdc132a2.png)

**这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)可以直接[【点击 “性能调优”】](https://gitee.com/vip204888/java-p7)免费下载!**

/java-p7)


### 最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

[外链图片转存中...(img-KhYcYpAa-1628421447523)]

**这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)可以直接[【点击 “性能调优”】](https://gitee.com/vip204888/java-p7)免费下载!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值