新用户注册入口 老用户登录入口

[转载]4.2创建自定义Spring Boot自动配置Starter

文章作者:转载 更新时间:2023-02-10 20:49:04 阅读数量:268
文章标签:自定义自动配置自定义自动配置
本文摘要:本文介绍了如何创建自定义Spring Boot自动配置Starter,通过构建一个名为“db-count-starter”的模块实现对Repository实例数量的统计。首先,在项目中搭建多模块Gradle构建结构,并在新模块中配置build.gradle依赖Spring Boot与Spring Data Commons。接着,创建DbCountRunner类实现CommandLineRunner接口以收集并打印Repository中的条目数量。同时,定义DbCountAutoConfiguration类,使用@Bean注解提供DbCountRunner的实例注入。然后,在META-INF/spring.factories文件中声明DbCountAutoConfiguration为自动配置类,以便Spring Boot启动时能自动加载。最后,在主项目的build.gradle中添加对自定义starter模块的依赖。当项目启动时,自定义starter利用SpringFactoriesLoader和自动装配机制成功收集并输出了各个Repository的记录数。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/owen_william/article/details/107867328。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

4.2创建自定义Spring Boot自动配置Starter

  这个章节,我们将会创建我们自己的Spring Bootstarter,这个starter会包含一个自动依赖在我们的项目中。

  在第二章节中, 我们已经知道如何去创建数据库属性对象。让我们创建一个简单的starter,这个starter会创建另外一个CommandLineRunner,然后收集Repository的实例并且打印所有的实例。

  4.2.1代码实现

1.首先我们创建一人新文件夹db-count-starter在项目根目录下。

2.在文件夹db-count-starter下创建一份settings.grale文件,添加以下内容。

include 'db-count-starter'

3.在db-count-starter文件夹下创建build.gradle的文件,然后添加如下的代码。

 apply plugin: 'java'
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
} d
ependencies {
compile("org.springframework.boot:spring-boot:1.2.3.RELEASE")
compile("org.springframework.data:spring-data-commons:1.9.2.RELEASE")
}

 

4.接着,我们在fb-count-starter下创建这个目录结构src/main/java/org/test/bookpubstarter/dbcount

5.在新创建的文件下面,让我们添加实现接口CommandLineRunner文件,名称叫做DbCountRunner.java.

 public class DbCountRunner implements CommandLineRunner

{

    protected final Log logger = LogFactory.getLog(getClass());

    private Collection<CrudRepository> repositories;

 

    public DbCountRunner(Collection<CrudRepository> repositories)

    {

       this.repositories = repositories;

    }

 

    @Override

    public void run(String... args) throws Exception

    {

       repositories.forEach(crudRepository -> logger.info(String.format(

              "%s has %s entries",

               getRepositoryName(crudRepository.getClass()),

              crudRepository.count())));

    }

 

    private static String getRepositoryName(Class crudRepositoryClass)

    {

       for (Class repositoryInterface : crudRepositoryClass.getInterfaces())

       {

           if (repositoryInterface.getName().startsWith(

                  "org.test.bookpub.repository"))

           {

              return repositoryInterface.getSimpleName();

           }

       }

       return "UnknownRepository";

    }

 

}

 

6.我们创建一个DbCountAutoConfiguration.java来实现DbCountRunner。

 @Configuration

public class DbCountAutoConfiguration

{

    @Bean

    public DbCountRunner dbCountRunner(Collection<CrudRepository> repositories)

    {

       return new DbCountRunner(repositories);

    }

}

 

7.我们需要告诉Spring Boot我们新创建的JAR包含自动装配的类。我们需要在db-count-starter/src/main下创建resources/META-INF文件夹。

8.在resources/META-INF下创建spring.factories文件,添加如下内容。

 org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.test
.bookpubstarter.dbcount.DbCountAutoConfiguration

 

9.在主项目的build.gradle下添加如下代码

 compile project(':db-count-starter')

 

10.启动项目,你将会看到控制台的信息下:

  2020-04-05 INFO org.test.bookpub.StartupRunner : Welcome to

the Book Catalog System!

2020-04-05 INFO o.t.b.dbcount.DbCountRunner :

AuthorRepository has 1 entries

2020-04-05 INFO o.t.b.dbcount.DbCountRunner :

PublisherRepository has 1 entries

2020-04-05 INFO o.t.b.dbcount.DbCountRunner :

BookRepository has 1 entries

2020-04-05 INFO o.t.b.dbcount.DbCountRunner :ReviewerRepository has 0 entries

2020-04-05 INFO org.test.bookpub.BookPubApplication : Started

BookPubApplication in 8.528 seconds (JVM running for 9.002)

2020-04-05 INFO org.test.bookpub.StartupRunner : Number of

books: 1

 

4.2.2代码说明

因为Spring Boot的starter是分隔的,独立的包,仅仅是添加更多的类到我们已经存在的项目资源中,而不会控制更多。为了独立技术,我们的选择很少,创建分开的配置在我们项目中或创建完全分开的项目。更好的方法是通过创建项目文件夹去转换们的项目到Gradel Multi-Project Build和子项目依赖于根目录到build.gradle。Gradle实际是创建JAR的包,但是我们不需要放入到任何地方,仅仅通过compile project(‘:db-count-starter’)来包含。

  Spring Boot Auto-Configuration Starter并没有做什么,而是Spring Java Configuration类注释了@Configuration和代表性的spring.factories文件在META-INF的文件夹下。

 当应用启动时,Spring Boot使用SpringFactoriesLoader,这个类是Spring Core中的,目的是为了获得Spring Java Configuration,这些配置给了org.springframework.boot.autoconfigure.EnableAutoConfiguration。这样之下,这些调用会收集spring.factories文件下的所有jar包或其它调用的路径和成分到应用的上下文的配置中。除此之了EnableAutoConfiguration,我们可以定义其它的关键接口使用,这些可以自动初始化在启动期间与如下的调用相似:

org.springframework.context.ApplicationContextInitializer
org.springframework.context.ApplicationListener
org.springframework.boot.SpringApplicationRunListener
org.springframework.boot.env.PropertySourceLoader
org.springframework.boot.autoconfigure.template.TemplateAvailabilityProvider
org.springframework.test.contex.TestExecutionListener

  具有讽刺的是,Spring Boot Starter并不需要依赖Spring Boot的包,因为它编译时间上的依赖。如果我们看DbCountAutoConfiguation类,我们不会看到任何来自org.springframework.book的包。这仅仅的原因是我们的DbCountRunner实现了接口org.sprigframework.boot.CommandLineRunner.

 

本篇文章为转载内容。原文链接:https://blog.csdn.net/owen_william/article/details/107867328。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
Spring Boot StarterSpring Boot Starter是一种特殊的依赖模块,它预先配置了一系列相关技术的依赖项和默认配置,使得开发者在构建Spring Boot应用时可以快速集成特定功能。例如,在本文中,我们创建了一个名为“db-count-starter”的自定义Starter,它包含了自动统计Repository实例数量的功能,并且通过自动装配机制无缝融入Spring Boot应用。
自动装配 (Auto-Configuration)在Spring Boot框架中,自动装配是一种能够根据项目类路径中的类自动配置Bean的行为。当Spring Boot应用启动时,会扫描项目的类路径并查找`META-INF/spring.factories`文件中的自动配置类列表。这些配置类通常使用`@Configuration`注解,它们会依据项目已有的依赖及配置信息来自动创建、配置和注入Bean。在本文中,我们通过实现DbCountAutoConfiguration类实现了对DbCountRunner的自动装配。
CommandLineRunnerCommandLineRunner是Spring Boot提供的一个接口,任何实现该接口的类在Spring Boot应用启动完成后都会运行其`run(String... args)`方法。这使得开发者可以在应用启动后执行一些初始化或一次性任务。在本例中,我们创建了DbCountRunner类来实现CommandLineRunner接口,以便在Spring Boot应用启动时收集所有Repository实例的数量并打印出来。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入理解了如何创建自定义Spring Boot自动配置Starter之后,读者可以进一步探索和实践Spring Boot生态系统的更多高级特性。近期,Spring Boot 2.5版本发布,引入了一系列新功能和优化,例如对Spring Native Beta版的支持,使得Spring应用能够原生编译为容器镜像,从而实现更快的启动速度和更小的资源占用。此外,对于云原生环境的适应性也得到了增强,如支持Kubernetes的更多特性。
为了更好地利用Spring Boot进行微服务架构设计与开发,可进一步阅读《Spring Boot实战》一书,书中详细解读了如何构建高可用、高性能的应用,并结合实例深入探讨了自动装配、Actuator监控、配置管理等核心功能。同时,关注Spring官方博客和GitHub仓库,了解最新的更新动态和技术指导,以便及时将这些最佳实践应用于实际项目中。
另外,对于自动化测试和DevOps流程整合,Spring Boot也提供了丰富的支持。比如,通过集成Testcontainers库来实现数据库或缓存依赖的真实环境模拟测试,以及利用Spring Cloud Config Server实现配置中心化管理。深入研究这些内容,有助于提升整体项目的开发效率和运维质量。
总之,在掌握了自定义Spring Boot Starter的基础之上,读者应不断跟进Spring Boot的最新发展,学习其在微服务架构、云原生部署、持续集成/持续交付等方面的最佳实践,以推动自身技术能力的迭代升级。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
nc host port - 通过netcat工具连接到远程主机和端口。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
响应式抖音课程培训学院类企业前端模板下载 01-21 jQuery点击显示隐藏更多文字内容插件 01-15 黑色设计师简历响应式网页模板下载 01-14 [转载]Tomcat启动时卡在“ Deploying web application directory ”很久的解决方法 12-19 Saiku LDAP集成登录失效问题:排查配置错误、身份验证及解决方案实操 12-01 Spring Cloud微服务架构中注册中心的必要性与服务间通信实践:服务发现、API契约与高可用性考量 11-23 MahoutIllegalArgumentException在Apache Mahout中的应用场景:矩阵维度不匹配与向量索引异常解析及参数有效性的API调用实践 10-16 [转载]Docker 相关配置文件路径 09-08 蓝色精品美容整形机构网站模板 08-29 本次刷新还10个文章未展示,点击 更多查看。
Gradle在持续集成中的关键作用:自动化构建、依赖管理与多项目构建实践及CI服务器集成 07-06 化妆品购物商城通用网站模板下载 06-27 响应式建筑装饰设计类企业前端CMS模板下载 04-14 微服务架构下用户认证鉴权:网关层统一处理与服务内部处理的比较及选择考量 04-09 响应式会议活动主题着陆页网站模板 03-24 Tomcat内存泄漏问题在Web应用程序中的解决方案:Servlet上下文管理、全局变量引用与弱引用实践及监控工具应用 03-15 Kafka消费者消费偏移量设置:auto.offset.reset策略与手动控制方法详解 02-10 [转载]JavaScript中的时间与日期、正则表达式和Function类型 01-24 大气简洁手机电子产品展示柜台前端模板 01-22 项目案例展示设计公司企业网站模板 01-18 Bootstrap博客后台管理系统网站模板 01-08
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"