@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)文件,每一个分支里面会有详细的介绍。

**这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(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)免费下载!**
本文介绍了一个SpringCloud应用的配置和使用,包括UserAutoConfigure的启用,使用UserClient获取用户信息,以及通过条件注解@ConditionalOnProperty实现用户服务的条件化加载。在面试中,这些内容涉及到缓存机制、一致性哈希和分布式系统的设计。
1822

被折叠的 条评论
为什么被折叠?



