范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

浅谈一下SpringBootStarter的实现

  使用Spring cloud的时候,需要使用某些功能的时候,通过引用starter然后做些简单的配置就可以直接使用对应的功能,卧槽,爽,哎,那自己想自己撸一个要怎么实现呢?
  官方文档有这么一段
  pring Boot 检查已发布的 jar 中是否存在 META-INF/spring.factories 文件。该文件应在 EnableAutoConfiguration 键下列出您的配置类
  "EnableAutoConfiguration 键"具体点应该是org.springframework.boot.autoconfigure.EnableAutoConfigurationorg.springframework.boot.autoconfigure.EnableAutoConfiguration= com.mycorp.libx.autoconfigure.LibXAutoConfiguration, com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration
  定义一个starter包含下面几个步骤:
  1、创建自动装配类,Spring boot自动根据spring.factories扫描,可以理解为starter的入口类,多个类会spring.factories配置会按配置的顺序执行。
  2、定义配置的承载属性类,用于承载配置文件的配置项
  3、定义功能的实现类,在自动装配类里注入
  先创建个Maven的项目
  spring-boot-configuration-processor并不是必须的,这个在生成jar包之后,会产生一个spring-configuration-metadata.json元数据描述文件,在引用的时候,配置application.properties或者application.yaml的时候可以自动提示配置项。    com.springredis.starter         spring-boot-starter-springredis     1.0.1          jar              spring-boot-starter-parent         org.springframework.boot         2.7.0                                org.springframework.boot             spring-boot-starter                               org.springframework.boot             spring-boot-configuration-processor             true              
  定义自动装配的类package com.springredis;  import org.springframework.beans.factory.annotation.Autowired; 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;  @Configuration @EnableConfigurationProperties(SpringRedisProperty.class) @ConditionalOnProperty(prefix = "springredis",value = "enabled",matchIfMissing = true) public class SpringRedisAutoConfiguration {      /*     * 把SpringRedisProperty注入进来,传递给SpringRedisService使用     * */     @Autowired     SpringRedisProperty springRedisProperty;      /*     * 把SpringRedisService自动装配到容器     * */     @Bean     public  SpringRedisService springRedisService(){         return  new SpringRedisService(springRedisProperty);     } }
  定义配置承载类,读取redis的账号密码服务器ip端口和db的下表package com.springredis;  import org.springframework.boot.context.properties.ConfigurationProperties;     /*     * 以springredis为前缀,配置的时候用springredis.xxxx为key     * */ @ConfigurationProperties(prefix = "springredis") public class SpringRedisProperty {     private  String host;     private  Integer port;     private  Integer dbIndex;     private  String userName;     private  String password;      public String getHost() {         return host;     }      public void setHost(String host) {         this.host = host;     }      public Integer getPort() {         return port;     }      public void setPort(Integer port) {         this.port = port;     }      public Integer getDbIndex() {         return dbIndex;     }      public void setDbIndex(Integer dbIndex) {         this.dbIndex = dbIndex;     }      public String getUserName() {         return userName;     }      public void setUserName(String userName) {         this.userName = userName;     }      public String getPassword() {         return password;     }      public void setPassword(String password) {         this.password = password;     } }
  定义功能实现类,根据配置(SpringRedisProperty类承载了读取配置文件的值),拼接一个redis的字符串,打印一下日志。package com.springredis;  import org.slf4j.Logger; import org.slf4j.LoggerFactory;  public class SpringRedisService {      private SpringRedisProperty springRedisProperty;     private Logger logger=LoggerFactory.getLogger(SpringRedisService.class);     public  SpringRedisService(SpringRedisProperty springRedisProperty){         this.springRedisProperty=springRedisProperty;         getRedisConnectionString();     }       public  String getRedisConnectionString(){         String connectionString =                   this.springRedisProperty.getUserName()+":"                 + this.springRedisProperty.getPassword()+":"                 + this.springRedisProperty.getHost()                 +"@"+this.springRedisProperty.getPort()                 +"/"+this.springRedisProperty.getDbIndex();         logger.info(connectionString);         return  connectionString;     } }
  在resource创建一个META-INF创建一个spring.factories文件org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.springredis.SpringRedisAutoConfiguration
  最后生成jar,测试环境就可以开始了。
  创建个spring-boot-web                          org.springframework.boot             spring-boot-starter-web                                com.springredis             system             spring-boot-starter-springredis             1.0.1             ${project.basedir}/lib/spring-boot-starter-springredis-1.0.1.jar              
  把生成的starter的jar拷贝到lib目录下(这个文件夹随便定义,在pom对应写上正确的引用路径即可)。
  添加starter的配置信息
  application.yamlspringredis:   host: 127.0.0.1   port: 6379   user-name: aming   password: 123456   db-index: 0
  其他的业务代码都不写,启动测试一下。
  定义个Controller调用一下Service的接口package com.starter.startertest;  import com.springredis.SpringRedisService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;  @RestController public class StarterController {      @Autowired     SpringRedisService service;      @GetMapping("test")     public  String GetRedisConnectionString(){         return service.getRedisConnectionString();     } }
  nice!!!

威少训练3分!一天13消息克莱祝福费德勒,贝弗利穿湖人新球衣感谢各位继续关注NBA长草期,和我一起了解NBA球星与球队最新动态。多支球队开始备战新赛季,詹姆斯晒幸福,贝弗利成湖人新球衣试穿者,克莱祝福费德勒,威少训练三分17中15。湖人球星9月18日晚间消息多家公司发布重大利空消息,2公司减持6一增减持增持江苏阳光控股股东的一致行动人拟增持2股份宝馨科技实控人的一致行动人拟增持0。81天铭科技实控人拟增持0。11减持上海艾录东方证券滁州东证拟合计减持不超6伟思医疗多名股东达洛特将是曼联右后卫的终极答案?上一篇对曼联左后卫的人员发表了一点自己的看法,这一篇说一下曼联的右后卫,现有右后卫人员主要是达洛特和万比萨卡,下面来说一下两个人的技术特点并预测一下两个人未来在队内的发展前景。20金卡戴珊和坎耶维斯特在北斯篮球赛上公开互动上周末,金卡戴珊和坎耶维斯特一起观看了西北大学的篮球比赛。在这对前夫妇的新照片中,金和坎耶似乎在聊天,同时支持他们的大女儿参加最近的体育比赛。照片中,金发碧眼的金身着白色背心和亮橙U19国青12负十人乌兹别克斯坦北京时间9月16日,U20亚洲杯预选赛A组第3轮,中国U19对阵乌兹别克斯坦U19,由于对手是U20亚洲杯东道主,因此本场比赛的结果并不计入排名。上半场乌兹别克斯坦U19率先攻入一西甲最新积分榜皇马豪取6连胜继续领跑,贝蒂斯逆转稳居第3昨晚今晨,西甲联赛第6轮激战多场,皇马客场21击败马竞,豪取开局6连胜,继续领跑积分榜,罗德里戈和巴尔韦德分别破门,埃尔莫索进球但随后吃到红牌贝蒂斯主场21逆转赫罗纳,伊格莱西亚斯32打哭日本伊藤美诚,王曼昱连轰3冠,陈幸同连夺3冠北京时间9月19日消息,2022年国际乒联成都世乒赛即将开赛,休斯顿世乒赛女单冠军王曼昱,奥运会女单冠军陈梦等,将领衔中国女乒再次冲冠。与此同时,世界冠军陈幸同钱天一在WTT赛场连坂本幸雄日本芯片巨头,却被美韩联合搞垮,72岁为复仇投奔中国如果您喜欢这篇文章,请点击右上方的关注。感谢您的支持和鼓励,希望能给您带来舒适的阅读体验。随着时代的发展,日本就在半导体和芯片领域塑造了巨人形象,将日本的经济直接拉高了一个层次。日欧锦赛施罗德26分德国胜波兰获第三欧锦赛德国队8269轻取波兰登上领奖台,获得第三名。约翰内斯沃格特曼和奥贝斯特连中三分,之后施罗德三分突破上篮,德国首节1914领先。第二节德国队长达5分钟不得分,被波兰追到2020比1不敌沙特,国青仍晋级U20亚洲杯决赛圈记者陈永报道北京时间9月19日凌晨,在U20亚洲杯预选赛中,中国U19国青0比1不敌沙特。三场比赛过后,国青队以6分的积分和6个净胜球成为成绩第三好(H组比赛尚未进行)的小组第二,施罗德266德国胜波兰夺欧洲杯季军北京时间9月19日,男篮欧洲杯季军战,德国以8269力克波兰,夺得本届欧洲杯的铜牌。德国队方面,湖人新援丹尼斯施罗德发挥出色,全场10投7中砍下26分6助攻另出现8次失误,步行者内
边检不是走红毯,法治面前没有明星通道,醒醒吧,大明星们!这几天,一个男偶像余景天上了热搜。不是他多会跳舞,也不是他长的有多帅,更不是他做了什么好人好事值得嘉奖。而是他在机场,被粉丝围着接机乱成一团导致了机场拥堵。按理说,粉丝接机也不是什华发股份研究报告珠海国资龙头,从地方走向全国(报告出品方作者海通证券,涂力磊,谢盐)1珠海国资背景,从珠海走向全国珠海华发实业股份有限公司(以下简称华发股份)是承接华发集团房产开发板块的平台公司。公司组建于1992年,前身始建立正确的消费观我发现普通家庭的父母真的很少会在孩子小的时候就有意识地去培养他们的理财观念。大概是因为儒家思想的影响让大家觉得一家人谈钱是一件很俗气的事吧?但实际上一个人的消费观很大程度上来自于自过去25万年,男性平均30岁当爹,女性呢?文李木子特定世代时间(繁殖一代所需时间)可以告诉人们很多关于人类生物学和社会组织的信息。现在,美国科学家利用DNA突变开发了一种新方法,可以确定人类进化史上女性和男性的平均育龄。这女性特殊时期的用药(收藏备用)女性一生要经历许多特殊时期,在医学上,妊娠期哺乳期都属于临床特殊人群。特殊人群一般指妊娠期和哺乳期妇女小儿老年人肝病患者肾功能不全患者胃病患者6种类型。特殊人群与一般人群相比生理生中国人过年能多几天假期吗?有人提议延长到9天!春节应该放几天?最近,有政协委员提议可以延长到9天,具体是将3天假期增加两天,在除夕前两天就开始放,一共放5天,然后4天调休不变,加起来就是9天假日。目前,春节只有7天假,相比之下想脸部皮肤嫩白祛黄,试试皮秒或超皮秒没有人能拒绝水嫩细滑无瑕透亮的肌肤,当我们被岁月被日晒或是被不知何时出现的种种面部皮肤问题困扰时,激光会成为我们解决问题的贴心伙伴,南方医科大学皮肤病医院医美中心的颜韵灵医师建议,ELFENLAND体态揭秘明星高级感从何而来一到年底就有各种时尚红毯女明星们用精致妆容疯狂输出而想要在群芳中一枝独秀比的就是气质和体态今日揭秘明星的高级感从何而来?很多明星精修静态图秒杀众人一旦走在红毯上就暴露短处肩部打不开拉文最后一攻想造犯规但裁判没吹哨北京时间1月12日,华盛顿奇才3分险胜芝加哥公牛,终场前5。1秒,凯尔库兹马投出漂移三分完成准绝杀。落后三分的公牛本有绝平将比赛拖入加时的机会,但是最后一攻扎克拉文没有选择将球传给蓝牙耳机适合运动吗最受欢迎的蓝牙耳机品牌推荐说到日常生活中必不可少的数码产品,除了手机就属蓝牙耳机了。尤其是蓝牙耳机便捷舒适的佩戴体验,完美解决了有线耳机繁琐打结的问题。蓝牙耳机在运动圈尤为受欢迎,无线的设计再也不担心耳机线(外代二线)赛车达喀尔拉力赛第九赛段赛况(2)当日,2023年达喀尔拉力赛在沙特阿拉伯结束了从利雅得到哈拉德的第九赛段的比赛。汽车组中,巴林车队的法国车手勒布获得本赛段冠军,丰田车队的卡塔尔车手阿提亚在总积分榜上领先。摩托车组