Spring Boot自定义Starter组件开发实现配置过程

目录
  • 自定义starter
  • 为什么要自定义starter
  • 自定义starter的命名规则
  • 实现方法
    • 引入依赖
    • 编写测试类
    • 创建配置类
    • 创建spring.factories文件
  • 乱码问题
  • 解决方案:
    • 1. 使用yml配置文件进行配置。
    • 2. 使用自定义配置文件如:
    • 3. 把中文换成对应的ASCII码。

自定义starter

SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用者只需要在maven中引入starter依赖,SpringBoot就能自动扫描到要加载的信息并启 动相应的默认配置。starter让我们摆脱了各种依赖库的处理,需要配置各种信息的困扰。 SpringBoot会自动通过classpath路径下的类发现需要的Bean,并注册进IOC容器。SpringBoot提供 了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。所有这些依赖模块都遵循着约定 成俗的默认配置,并允许我们调整这些配置,即遵循“约定大于配置”的理念。

为什么要自定义starter

在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,我们经常将其放到一个特定的 包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一 遍,麻烦至极。如果我们将这些可独立于业务代码之外的功能配置模块封装成一个个starter,复用的时 候只需要将其在pom中引用依赖即可,SpringBoot为我们完成自动装配,简直不要太爽。

自定义starter的命名规则

SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。官方建议自定义的starter使用 xxx-spring-boot-starter命名规则。以区分SpringBoot生态提供的starter。

有了以上的了解后,来创建 Maven 项目,目录结构如下:

实现方法

实现自定义starter大致分一下几步:

1.引入pom依赖

2.编写测试用例类

3.创建自动配置类

4.在resources包下增加配置文件

引入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.mystylefree</groupId>
    <artifactId>custom-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.7.0</version>
        </dependency>
    </dependencies>
</project>

这里引入了自动配置类

     <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.7.0</version>
        </dependency>
    </dependencies>

编写测试类

在使用Spring官方的Starter时通常可以在application.properties中来配置参数覆盖掉默认的值。即name的值会被配置文件中的值替换掉。

@EnableConfigurationProperties({PersonProperties.class}) //开启ConfigurationProperties注解
@ConfigurationProperties(prefix = "person")
public class PersonProperties {
    private int id;
    private String name="章三";
}

省略set/get方法和toString方法

创建配置类

@Configuration
//当类路径classpath下有指定当类   (SimpleBean)  的情况下进行自动配置
@ConditionalOnClass(PersonProperties.class)
public class MyAutoConfiguration {
    static {
        System.out.println("MyAutoConfiguration init ...");
    }
    @Bean
    public PersonProperties personProperties(){
        return new PersonProperties();
    }
}

创建spring.factories文件

/META-INF/spring.factories文件放在/src/main/resources目录下
注意:META-INF是自己手动创建的目录,spring.factories也是自己手动创建的文件,在该文件中配置自己的自动配置类。

一定要按照下面的位置结构添加

文件中的内容如下

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.mystylefree.config.MyAutoConfiguration

这时配置都加好了

只需从新打下包就行

mvn clean install 

我们自己设置的starter包就保存到本地的maven仓库了

接下来我们就能使用刚刚自定义的jar包实现pom依赖引用了

这是我的maven依赖地址

将这个依赖加入到新的项目中引入即可

这是我的一个新springboot项目

1.加入依赖

根据自己的名称添加

         <dependency>
            <groupId>cn.mystylefree</groupId>
            <artifactId>custom-spring-boot-starter</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

2.设置application.properties

person.id=1
person.name=小米

由于设置的前缀名上person

3.添加测试用例

@SpringBootTest
class SpringBootDemoApplicationTests {
    @Autowired
    private PersonProperties personProperties;
    @Test
    void contextLoads() {
        int id = personProperties.getId();
        String name = personProperties.getName();
        System.out.println(id+name);
    }
}

这时 调试就能使用自定义的starter了

但是发现出现中文乱吗了,不慌设置一下编码格式

重新启动项目

乱码问题

发现还是乱码???

在Spring Boot项目中,有时候需要自定义一些配置,如果使用中文值并使用注解读取时就会出现乱码。

原因: Spring Boot注解读取application.properties或者application-{profile}.properties文件时默认的是ISO_8859_1编码。

解决方案:

1. 使用yml配置文件进行配置。

Spring Boot在读取yaml配置文件时使用的是UTF-8的编码方式。

2. 使用自定义配置文件如:

custom.properties配置中文属性,并使用@PropertySource(value="classpath:custom.properties", encoding="UTF-8")注解指定读取的文件和编码。代码如下:

@Data
@ConfigurationProperties(prefix = "custom.user")
@PropertySource(value="classpath:custom.properties", encoding="UTF-8")
public class UserProperties {
//	@Value("${custom.user.name}")
	private String name;
//	@Value("${custom.user.sex}")
	private String sex;
}

使用@ConfigurationProperties和@Value均可以正常读取。

3. 把中文换成对应的ASCII码。

custom.user.sex=男
换成:

custom.user.sex=\u7537
以上三种方法均可以正常读取配置文件中的中文字符。

参考文档:

Spring Boot使用@ConfigurationProperties或者@Value读取properties文件中文乱码

到此这篇关于SpringBoot自定义Starter组件开发实现的文章就介绍到这了,更多相关SpringBoot自定义Starter组件开发内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • gateway与spring-boot-starter-web冲突问题的解决

    gateway与spring-boot-starter-web 冲突 环境: SpringCloud 版本 ---- Finchley.SR2 SpringBoot 版本 ---- 2.0.6.RELEASE 问题描述: 将 zuul 网关升级为 gateway 时,引入gateway 依赖启动网关子项目报错 引入的依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId&g

  • spring boot开发遇到坑之spring-boot-starter-web配置文件使用教程

    本篇我将继续向小伙伴介绍springboot配置文件的配置,已经全局配置参数如何使用,好了下面开始我们今天的内容介绍. 我们知道Spring Boot支持容器的自动配置,默认是Tomcat,当然我们也是可以进行修改的: 1.首先我们排除spring-boot-starter-web依赖中的Tomcat:在pom文件中排除tomcat的starter <dependency> <groupId>org.springframework.boot</groupId> <

  • springboot配置多数据源的一款框架(dynamic-datasource-spring-boot-starter)

    前言 前篇博客介绍了用基本的方式做多数据源,可以应对一般的情况,但是遇到一些复杂的情况就需要扩展下功能了,比如:动态增减数据源.数据源分组,纯粹多库,读写分离一主多从,从其他数据库或者配置中心读取数据源等等.其实就算没有这些需求,使用此款框架实现多数据源也比之前要便捷,快速的多 框架简介 dynamic-datasource-spring-boot-starter 是一个基于 springboot 的快速集成多数据源的启动器 文档:https://github.com/baomidou/dyna

  • Spring Boot自定义Starter组件开发实现配置过程

    目录 自定义starter 为什么要自定义starter 自定义starter的命名规则 实现方法 引入依赖 编写测试类 创建配置类 创建spring.factories文件 乱码问题 解决方案: 1. 使用yml配置文件进行配置. 2. 使用自定义配置文件如: 3. 把中文换成对应的ASCII码. 自定义starter SpringBoot中的starter是一种非常重要的机制,能够抛弃以前繁杂的配置,将其统一集成进 starter,应用者只需要在maven中引入starter依赖,Sprin

  • spring boot 自定义starter的实现教程

    spring boot 使用 starter 解决了很多配置问题, 但是, 他是怎么来解决这些问题的呢? 这里通过一个简单的例子, 来看一下, starter是怎么来设置默认配置的. 一. 建 starter 项目 自定义的starter, 项目命名规范是: 自定义名-spring-boot-starter 先来看一下, 我最后的目录结构 1. 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns

  • Spring Boot自定义 Starter并推送到远端公服的详细代码

    目录 一.新建项目,完善pom文件 二.编写业务逻辑 三.编写自动配置类AutoConfig 四.编写spring.factories文件加载自动配置类 五.maven打包 六.推送到远端仓库,使用JitPack 七.使用案例 八.相关问题 一.新建项目,完善pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.

  • Spring Boot 集成Shiro的多realm配置过程

    我在做毕设的时候采用shiro进行登录认证和权限管理的实现.其中需求涉及使用三个角色分别是:学生.教师.管理员.现在要三者实现分开登录.即需要三个Realm--StudentRealm和TeacherRealm.AdminRealm,分别处理学生.教师和管理员的验证功能. 但是正常情况下,当定义了多个Realm,无论是学生登录,教师登录,还是管理员登录,都会由这三个Realm共同处理.这是因为,当配置了多个Realm时,我们通常使用的认证器是shiro自带的org.apache.shiro.au

  • Spring Boot 自定义starter的示例代码

    SpringBoot 个人感觉特点: 1)众多库的集合(各种Starter),方便快速构建应用系统. 2)自动配置spring(通过AutoConfiguration机制),简化配置,也方便扩展新的Starter. 3)内嵌web容器,无需WAR部署. 创建一个用maven构建的springboot项目 pom文件配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="ht

  • Spring Boot自定义配置实现IDE自动提示功能

    一.背景 官方提供的spring boot starter的配置项,我们用IDE配置的时候一般都有自动提示的,如下图所示 而我们自己自定义的配置却没有,对开发非常不友好容易打错配置, 那这个是怎样实现的呢? 二.提示原理 IDE是通过读取配置信息的元数据而实现自动提示的,而元数据在目录 META-INF 中的 spring-configuration-metadata.json 或者 additional-spring-configuration-metadata.json 三.实现自动提示 以

  • Spring Boot 中starter的原理详析

    目录 1.springboot 的starter 的启动原理是什么 原理 来个例子 小结 2.springboot 是如何找到配置类的 3.springboot starter 的bean 是怎么加载到容器的 4.总结 前言: 今天介绍springboot ,也是写下springboot的插件机制,starter的原理,其实这个网上已经很多了,也是看了不少别人的文章,今天主要还是带着问题去记录下. 1.springboot 的starter 的启动原理是什么 原理 这个问题是很简单的,只要了解s

  • spring boot自定义log4j2日志文件的实例讲解

    背景:因为从 spring boot 1.4开始的版本就要用log4j2 了,支持的格式有json和xml两种格式,此次实践主要使用的是xml的格式定义日志说明. spring boot 1.5.8.RELEASE 引入log4j2的开发步骤如下: 1.首先把spring-boot-starter-web以及spring-boot-starter包下面的spring-boot-starter-logging排除,然后引入spring-boot-starter-log4j2包. <dependen

  • spring boot实战之内嵌容器tomcat配置

    本文介绍了spring boot实战之内嵌容器tomcat配置,分享给大家,具体如下: 默认容器 spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 通过需要用到的就是端口.上下文路径的修改,在spring boot中其修改方法及其简单: 在资源文件中配置: server.port=9090 server.contextPath=/lkl 启动spring boot 2015-10-04 00:06:55.768 INFO

  • Spring Boot与前端配合与Idea配置部署操作过程

    在开发项目时,后台人员可能来不及写html页面,这个时候需要相互配合.前端人员开发项目都有自己的一套项目结构,而Spring Boot或后台人员也有自己的一套项目结构,导致写出的静态页面无法直接拿过来就用. 在研究了Spring Boot的项目结构之后,还是可以通过一些方法来直接使用前端人员开发的页面. 前端人员操作过程 1.下载WAMP,或者XAMPP,或其它的web服务器集成软件.XAMPP是跨平台的集成软件,WAMP只能再Windows上使用. 注意:设置Web服务器禁止缓存,否则难以调试

随机推荐