轻松五步教你学会自定义springboot start
Spring Boot其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。Spring Boot 充分利用了 JavaConfig 的配置模式以及“约定优于配置”的理念,能够极大的简化基于 Spring MVC 的 Web 应用和 REST 服务开发。对于已经熟悉 Spring 生态系统的开发人员来说,Spring Boot 是一个很理想的选择.
以前当自己想掌握或者学习此类新知识时,一般都是直接百度demo,相信很多同学也是这么做的,什么东西的hello world都是百度一下,本地运行ok啦,然后才心情舒畅,觉得可以开始啦。但这次的demo并没有参考任何一位大佬的博客,当然笔者作为开发界的战六渣也没有三头六臂直接凭空开干,全靠官方文档,也希望大家能明白,最好的学习资料都是官方文档,最好的学习资料都是官方文档,最好的学习资料都是官方文档。
最要的事情说三遍,你在网上所百度到的demo不过是别人看懂官方文档后根据自己的理解搞出来的。废话了这么多。下面开始撸代码咯,起飞。。。
目标:自定义lijin-springboot-start-redis替代官方的spring-boot-data-redis的功能(粗糙替代),能让程序读取我们自定义开头的配置文件。并且自动注册bean到spring的上下文中。
先看下完整的项目结构:
第一步:新建一个maven项目,这个应该是个人都会的啦,如果这都不会,你还敢学springboot.
第二步:在resources目录下新建META-INF文件夹,建立spring.factories,并在里面输入:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.jin.lijin_springboot_start_redis.MyRedisAutoConfiguration
目的是让spring发现并加载你自己写的东西,你想让spring帮你做事情,总得打个招呼,让别人知道你在哪里吧。这是只定义了一个AutoConfiguration的情形,如果是定义多个呢。如果定义多个需要这样,
第一行是固定的,第二行起才是自定义的,每行以斜杠结尾,表示后面还有,最后一行不需要末尾加斜杠。
第三步:由于需要读取自定义前缀的配置文件,所以定义一个实体类来接收。这里我们只定义两个参数,分别是redis的ip和port.能够连接到redis就行。
//接受默认配置文件中以 lijin 开头的数据
@ConfigurationProperties("lijin")
public class MyRedisProperties {
private String myIp;
private int myPort;
public String getMyIp() {
return myIp;
}
public void setMyIp(String myIp) {
this.myIp = myIp;
}
public int getMyPort() {
return myPort;
}
public void setMyPort(int myPort) {
this.myPort = myPort;
}
}
第四步:自定义MyRedisAutoConfiguration,这个类完成组装bean的功能。
@Configuration
/*
* 当classpath中出现了Jedis这个类时,才会进行相应的配置。
* conditional 是有条件的 意思
*/
@ConditionalOnClass({ Jedis.class })
/*
* @ConfigurationProperties注解主要用来把properties配置文件转化为bean来使用的,
* 而@EnableConfigurationProperties注解的作用是@ConfigurationProperties注解生效。
* 如果只配置@ConfigurationProperties注解,在IOC容器中是获取不到properties配置文件转化的bean的。
*/
@EnableConfigurationProperties(MyRedisProperties.class)
public class MyRedisAutoConfiguration {
@Autowired
private MyRedisProperties properties;
@Bean
public Jedis myRedis() {
Jedis jedis = new Jedis(properties.getMyIp(), properties.getMyPort());
return jedis;
}
}
第五步:至此,我们以开发一个简单的自定义的start.下面执行install命令进行打包。mvn install
检测是否能够成功应用在springboot中
在一个能正常运行的springboot项目中,pom.xml中添加依赖
<dependency>
<groupId>com.jin</groupId>
<artifactId>lijin-springboot-start-redis</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
在application.properties文件中写入:
lijin.myIp=localhost
lijin.myPort=6379
注意这是我们自定义的前缀的配置项,除了我们自定的模块外,其他模块是不认识的。测试类如下:
@SpringBootApplication
public class DemoApplication implements CommandLineRunner {
//注入jedis
@Autowired
Jedis jedis;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
System.out.println(jedis.getClient().getHost());
System.out.println(jedis.getClient().getPort());
}
}
能输出结果,说明自动配置成功。