自己编写spring-boot自动配置starter,上传本地私库(idea)

创建一个starter,在其他项目应用此starter,可以灵活打印被引用的starter里的 helloXXXX,通过配置文件可以修改XXXX

  1. 创建jar项目
    创建过程过多废话,你懂得
    在这里插入图片描述
    在这里插入图片描述
  2. 修改pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>ts</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <name>ts</name>
    <packaging>jar</packaging>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--以下autoconfigure和lombok是我加的-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
            <version>2.4.3</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.12</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.example.ts.TsApplication</mainClass>
                </configuration>
                 <!-- <executions>
                      <execution>
                          <id>repackage</id>
                          <goals>
                              <goal>repackage</goal>
                          </goals>
                      </execution>
                  </executions>  注意这里-->
            </plugin>
        </plugins>
    </build>
</project>
  1. HelloProperties :创建自己的属性配置类,有此类才会读取到application.yml里你定义的属性,此类必须加@ConfigurationProperties注解(代码如下)
package com.example.ts.properties;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
 1. Created by wx on 2021/2/28.
 */
@Setter
@Getter
@ConfigurationProperties(prefix = "hello")//它可以让开发者将整个配置文件,映射到对象中,比@Value 效率更高。
public class HelloProperties {

    /**
     * 默认值
     */
    private static final String MSG = "world";

    private String msg = MSG;
}
  1. HelloService :写个service,里边可以写业务逻辑,本例根据此类的存在与否创建bean,当然这个service也可以是第三方的类
package com.example.ts.service;

import lombok.Getter;
import lombok.Setter;
import org.springframework.stereotype.Service;

/**
 * Created by wx on 2020/10/30.
 * 判断依据类 ,逻辑类
 */
//@Service
@Setter
@Getter
public class HelloService {
    private String msg;

    public String sayHello(){
        return "Hello" +  msg;
    }


}

  1. HelloAutoConfiguration :自动配置类,这个类最重要,是自动配置的最重要的类, 这个类要用到4个类注解,2个方法注解
package com.example.ts.autoConfiguraution;

import com.example.ts.properties.HelloProperties;
import com.example.ts.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Created by wx on 2021/2/28.
 */
@Configuration//定义配置类,可当做之前的xml
@ConditionalOnProperty(prefix="hello",value = "enabled",matchIfMissing=true)//来控制@Configuration是否生效
@EnableConfigurationProperties(HelloProperties.class)//次注解可以使HelloProperties的@ConfigurationProperties起作用
@ConditionalOnClass(HelloService.class)//类路径有才会加载
public class HelloAutoConfiguration {
    @Autowired
    private HelloProperties helloProperties;
    @Bean
    @ConditionalOnMissingBean(HelloService.class)
    public HelloService testervice(){
        HelloService helloService = new HelloService();
        helloService.setMsg(helloProperties.getMsg());
        return helloService;
    }
}
  1. apring.factories:注解配置文件,这个文件是自动配置的标志
    在src/main/resources里创建META-INF文件夹,创建文件apring.factories文件(内容如下)
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.ts.autoConfiguraution.HelloAutoConfiguration

注意,如果有多个配置类就用逗号隔开,\是为了换行仍然能读到属性
多个自动配置类时如下图,与本例无关,帮助理解格式
在这里插入图片描述
好了,下图是我刚创建的这个简单starter的源码结构图
在这里插入图片描述6. 构建打成jar包,如下图
在这里插入图片描述
7.把ts-0.0.1-SNAPSHOT.jar使用maven的安装到本地命令上传的本地私库

mvn install:install-file -Dfile="D:\workspace\cmtj\ts\target\ts-0.0.1-SNAPSHOT.jar" -DgroupId=com.example -DartifactId=ts -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar

打开我的私库查看,是有ts-0.0.1-SNAPSHOT.jar 的 如下图
在这里插入图片描述
8.找随便一个项目adapter-provider加入引用构建之后进行测试

 <dependency>
     <groupId>com.example</groupId>
     <artifactId>ts</artifactId>
     <version>0.0.2-SNAPSHOT</version>
 </dependency>

9.在adapter-provider这个工号才能管理引用项目里的application.ym里创建hello配置信息,如下图
在这里插入图片描述

   @Autowired
   private HelloService helloService;
   
    @RequestMapping(value = "/test")
    public  String test(){
        System.out.println(helloService.sayHello());
        return helloService.sayHello();
    }

启动adapter-provider,访问/test接口,测试成功
在这里插入图片描述

ps:启动adapter-provider时在ts这个stater中文件启动顺序
1:HelloProperties.class的getMsg方法,setMsg方法
2:HelloAutoConfiguration的testervice方法
3:HelloProperties.class的getMsg方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值