一、自定义SpringBoot Jar包
1、新建一个SpringBoot项目
新建一个SpringBoot项目并,引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
// 其他需要的依赖自行导入
2、编写业务逻辑
开始编写该jar的业务逻辑
service层
@Service
public class MsgService {
@Autowired
private CustomProperties customProperties;
public String printName(){
// 从配置文件中读取数据并输出
return customProperties.getName();
}
}
从配置文件中读取数据
@Component
@ConfigurationProperties("msg")
public class CustomProperties {
/**
* 名称
*/
private String name = "ralph";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
配置文件
msg:
name: ralph
3、配置jar包
编写自动配置类
@Configuration
@EnableConfigurationProperties(CustomProperties.class)
@Import(MsgService.class)
public class EntryConfig {
}
在resource下新建META-INF
文件夹,在文件夹下新建spring.factories
文件,文件内容如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ralph.springbootstarterralphtest.config.EntryConfig
配置提示文件spring-configuration-metadata.json
,该文件的作用为在引用jar包的地主修改msg.name时,会出现提示
该可手动配置也可自动生成,自动生成方式为:只要引入spring-boot-configuration-processor
依赖,在构建时会在target目录下生成该文件,复制过来即可
{
"groups": [
{
"name": "msg",
"type": "com.ralph.springbootstarterralphtest.config.CustomProperties",
"sourceType": "com.ralph.springbootstarterralphtest.config.CustomProperties"
}
],
"properties": [
{
"name": "msg.name",
"type": "java.lang.String",
"description": "名称",
"sourceType": "com.ralph.springbootstarterralphtest.config.CustomProperties"
}
],
"hints": []
}
4、收尾
至此所有配置完成,只需要将无用文件删除即可进行打包
- 删除启动类
- 删除test文件夹
- 删除pom文件中test依赖
- 删除pom文件中自动生成的依赖
5、打包
在maven工具在双击package即可开始打包,打包完成后会在target文件夹中生成jar包
二、在项目中使用外部jar包
1、在项目中新建目录libs
,将外部jar包存储至该文件夹中
2、在pom文件中引入外部jar包的依赖
<dependency>
<groupId>com.ralph</groupId>
<artifactId>spring-boot-starter-ralph-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/spring-boot-starter-ralph-test-0.0.1-SNAPSHOT.jar</systemPath>
</dependency>
其中scope和systemPath指定了外部jar包的作用地址
3、在项目中使用jar包的方法
修改配置文件
msg:
name: article
在项目中注入jar包的service并使用
@Autowired
private MsgService msgService;
public void customJar(){
String name = msgService.printName();
log.info(name);
}
输出结果:
[INFO XXX com.ralph.OtherService]: article
三、总结
在SpringBoot的自动装配原理中,SpringBoot 在启动时会去依赖的 starter 包中寻找 /META-INF/spring.factories 文件,然后根据文件中配置的路径去扫描项目所依赖的 Jar 包,所以我们需要在自定义jar包中配置spring.factories文件
元数据配置:
本文在进行元数据配置时,使用的是自动生成配置文件,关于手动配置时需要配置的属性,感兴趣的朋友可以浏览官网中的相关文档