springboot自制starter

前言

参考mybatis的starter,制作属于自己的相关的starter demo

一、观察mybatis自制的starter

在上一篇springboot聚合工程搭建的工程下

https://blog.csdn.net/sinat_36759535/article/details/112389076

在父pom引入

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>

在这里插入图片描述
在依赖中查找,发现mybatis自制的starter主要有这两个jar
在这里插入图片描述

二、自制完整starter

1.自制autoconfigure

在父工程下创建一个springboot工程
工程目录如下

在这里插入图片描述

pom文件需要修改打包为maven打包 一定要改,不然mvn install 打包到本地会失败

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cch</groupId>
    <artifactId>md5-spring-boot-autoconfigure</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <name>md5-spring-boot-autoconfigure</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

<!--修改为maven打包-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
        </plugins>
    </build>

</project>

config包目录下的类如下

@EnableConfigurationProperties(value = {MD5Properties.class})
@Configuration
public class MD5AutoConfiguration {
    @Autowired
    private MD5Properties md5Properties;

    @Bean
    MD5Service md5Service() {
        MD5Service md5Service = new MD5Service();
        md5Service.setProperties(md5Properties);
        return md5Service;
    }
}
@ConfigurationProperties(prefix = "com.md5")
public class MD5Properties {
    private String name="xxx";
    private String pwd="yyy";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

service包目录下的类如下:

public class MD5Service {

    private MD5Properties properties;

    public void setProperties(MD5Properties properties) {
        this.properties = properties;
    }

    public String getMD5(String input) {
        return MD5Util.getMD5(input.getBytes()) + "---" + properties.getName() + "===" + properties.getPwd();
    }
}

utils包目录下类如下:

public class MD5Util {

    public static String getMD5( String source ) {
        return getMD5( source.getBytes() );
    }

    public static String getMD5(byte[] source) {
        String s = null;
        char hexDigits[] = { 
                '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            byte tmp[];
            synchronized ( MD5Util.class ) {
                md.update(source);
                tmp = md.digest(); 
            }
            char str[] = new char[16 * 2]; 
            int k = 0;
            for (int i = 0; i < 16; i++) { 
                byte byte0 = tmp[i]; 
                str[k++] = hexDigits[byte0 >>> 4 & 0xf]; 
                str[k++] = hexDigits[byte0 & 0xf];
            }
            s = new String(str); 

        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;
    }

}

启动类如下

@SpringBootApplication
public class Md5SpringBootAutoconfigureApplication {

    public static void main(String[] args) {
        SpringApplication.run(Md5SpringBootAutoconfigureApplication.class, args);
    }

}

resource目录下
application.properties

com.md5.name=cch
com.md5.pwd=654321

META-INF目录下
spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.cch.md5springbootautoconfigure.config.MD5AutoConfiguration

将该工程mvn install到本地或者mvn deploy到远端供我们自制starter引用

2.自制starter

在父工程下创建一个springboot工程
工程目录如下

在这里插入图片描述
工程里面什么都不用改,只是把自己制作的md5-spring-boot-autoconfigure引入进来
pom
pom文件需要修改打包为maven打包 一定要改,不然mvn install 打包到本地会失败

<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.cch</groupId>
    <artifactId>md5-spring-boot-starter</artifactId>
    <version>0.0.2-SNAPSHOT</version>
    <name>md5-spring-boot-starter</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--引入自制的md5-spring-boot-autoconfigure-->
        <dependency>
            <groupId>com.cch</groupId>
            <artifactId>md5-spring-boot-autoconfigure</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
        </plugins>
    </build>

</project>

将该工程mvn install到本地或者mvn deploy到远端 供其他工程引用

三、测试

创建一个新的springboot工程,引用上述的md5-spring-boot-starter

工程目录如下
在这里插入图片描述
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>
    <parent>
        <groupId>com.cch</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <groupId>com.cch</groupId>
    <artifactId>module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module1</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--引入自制starter-->
        <dependency>
            <groupId>com.cch</groupId>
            <artifactId>md5-spring-boot-starter</artifactId>
            <version>0.0.2-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

controller包目录下类

@RestController
public class TestController {
    @Autowired
    private MD5Service md5Service;

    @RequestMapping(value = "",method = RequestMethod.GET)
    public void testDemo(){
        System.out.println(md5Service.getMD5("123456")+"-------------");
    }
}

Module1Application 启动类如下

@SpringBootApplication
public class Module1Application {

    public static void main(String[] args) {
        SpringApplication.run(Module1Application.class, args);
    }

}

application.properties

server.port=8888
com.md5.name=cch1
com.md5.pwd=12

postman测试如下
application.properties文件如果有配置md5相关则使用新配置的,否则使用默认的
在这里插入图片描述

在这里插入图片描述

总结

主要模仿Mybatis starter的做法
先有个autoconfigration 和starter ,starter什么都不做,只是单纯引用autoconfigration 让别人引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值