開發(fā)之前可以先看看第三方starter的格式,命名方式都是 第三方名稱-spring-boot-starter
可以參考druid的開發(fā)模式,一個模塊開發(fā)完,其實也可以分模塊開發(fā)
創(chuàng)建一個springboot模塊,模塊名稱就是starter名稱,例如我這里的模塊名稱為ip_spring_boot_starter
項目整體結(jié)構(gòu),注意包名要和目標(biāo)工程不一致,不然導(dǎo)入后,目標(biāo)工程掃包會掃到一起,出現(xiàn)其他錯誤,IpProperties都自動裝配上,報錯出現(xiàn)不唯一的bean。
pom文件導(dǎo)入業(yè)務(wù)開發(fā)所需要的依賴坐標(biāo)
二.starter工程業(yè)務(wù)開發(fā)比如,我這次設(shè)計的業(yè)務(wù)是記錄系統(tǒng)訪客獨立id訪問次數(shù),把開發(fā)的業(yè)務(wù)寫到service中,業(yè)務(wù)開發(fā)根據(jù)目標(biāo)工程的需要來編寫,因人而異,這里不多說明。
1.數(shù)據(jù)記錄的位置2.功能的觸發(fā)比如,目標(biāo)項目的方法需要實現(xiàn)該業(yè)務(wù),就需要在方法中加入bean.業(yè)務(wù)方法()來調(diào)用,如果很多方法都需要實現(xiàn)該業(yè)務(wù),不可能去每個方法里都加上這么一句代碼。這里用攔截器實現(xiàn),詳情如下
這里我們攔截器的功能是定義好了,但是spring并沒加載它,攔截器沒有起作用,下面需要注冊這個攔截器,在SpringMvcConfig中,做如下配置
知識點:加上注解@Configuration的配置類,@Bean創(chuàng)建的是代理對象,直接拿容器中已注入的bean,調(diào)用時不會再new一個新的bean
3.業(yè)務(wù)的參數(shù)配置①輸出頻率:多久輸出一次(默認(rèn)10秒輸出一次)
②數(shù)據(jù)特征:累計數(shù)據(jù) / 階段數(shù)據(jù)(默認(rèn)為累計數(shù)據(jù))
③數(shù)據(jù)格式:詳細(xì)模式 / 極簡模式 (默認(rèn)為詳細(xì)模式)
目標(biāo)工程的yml配置文件中設(shè)置
ipProperties類上加上注解
至此ipProperties是獲取到了配置的屬性數(shù)據(jù),但是還沒有用到業(yè)務(wù)方法中,等于說給的屬性值沒起作用,接下來就要把ipProperties的配置屬性值加到業(yè)務(wù)方法里,詳細(xì)如下
4.yml配置中的自動提示為了實現(xiàn)下圖這種添加配置時自動提示的功能
業(yè)務(wù)工程的pom文件加入配置處理器的坐標(biāo)
但是注意,要實現(xiàn)有提示功能,需要這個坐標(biāo),但是給目標(biāo)工程使用時,install的時候,需要把這個坐標(biāo)注釋掉,因為這樣jar包里有一組提示,文件里有一組提示,會出現(xiàn)兩組提示
簡單點吧,就是開發(fā)提示功能時導(dǎo)入這個坐標(biāo),開發(fā)完成后,install的時候,注釋掉這個坐標(biāo)就行了
org.springframework.boot spring-boot-configuration-processor true
配置文件中的提示信息都來自ipProperties類里寫的注釋,但是我們還想實現(xiàn)這種寫到最后有可選模式,就需要在spring-configuration-metadata.json中添加點東西了,hints里默認(rèn)是沒有值的,我們需要添加可選的代碼。
添加內(nèi)容
"hints": [
{ "name": "tools.ip.model",
"values": [
{ "value": "detail",
"description": "詳細(xì)模式."
},
{ "value": "simple",
"description": "極簡模式."
}
]
三.自動配置方式加載配置類這里照搬druid的自動配置文件,改一下即可,autoconfig包創(chuàng)建一個自動配置類,在自動配置類中加載業(yè)務(wù)類,將它定義成bean,可以直接@Import導(dǎo)入也可以使用@Bean。
自動配置類
最后效果是加載該業(yè)務(wù)模塊時,會加載spring.factories文件,加載spring.factories時會根據(jù)spring.factories里的全路徑類名加載autoconfig包下的自動配置類,加載自動配置類會加載類中定義的bean,即在目標(biāo)工程導(dǎo)入了業(yè)務(wù)的bean實現(xiàn)業(yè)務(wù)功能。
四.目標(biāo)工程導(dǎo)入starter1.先把業(yè)務(wù)工程install安裝到倉庫中(右側(cè)maven,點擊業(yè)務(wù)工程,install),這樣目標(biāo)工程才能從倉庫中導(dǎo)入
注意:業(yè)務(wù)工程的每次功能,代碼的更新就要clean再install,保證倉庫里的是最新版,這樣目標(biāo)工程也能同步上。
2.目標(biāo)工程的pom文件導(dǎo)入坐標(biāo),例如下
com ip_spring_boot_starter 0.0.1-SNAPSHOT
導(dǎo)入的坐標(biāo)不清楚可以在業(yè)務(wù)工程的pom文件中看到,如下圖
若想在目標(biāo)工程中使用業(yè)務(wù)模塊的功能,除了導(dǎo)入坐標(biāo),還需要在使用業(yè)務(wù)模塊的位置,進(jìn)行自動配置,例如下
@Autowired
private IpCountService ipCountService;//自動配置
@GetMapping("{currentPage}/{pageSize}")
public Result getPage(@PathVariable int currentPage,@PathVariable int pageSize,Book book){ipCountService.count();//調(diào)用自定義模塊業(yè)務(wù)方法
IPageiPage = bookService.getPage(currentPage, pageSize,book);
//如果當(dāng)前頁碼值大于了總頁碼值,那么重新執(zhí)行查詢操作,使用大頁碼值作為當(dāng)前頁碼值
//適用場景: 就是第3頁只有一條數(shù)據(jù),刪除自動刷新后,當(dāng)前頁仍然是3頁,但大頁碼已經(jīng)變成2頁了,可以f12詳細(xì)看看
if (currentPage>iPage.getPages()){iPage=bookService.getPage((int)iPage.getPages(),pageSize,book);
}
Integer code=iPage!=null?Code.GET_OK:Code.GET_ERR;
String msg=iPage!=null?"success":"查詢失敗,請稍后再試";
return new Result(code,iPage,msg);
}
該業(yè)務(wù)實現(xiàn)的就是每次分頁查詢時,獲取訪問頁面的ip及訪問次數(shù)
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:SpringBoot自定義starter開發(fā)詳細(xì)步驟說明-創(chuàng)新互聯(lián)
文章URL:http://muchs.cn/article38/coshsp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、動態(tài)網(wǎng)站、定制開發(fā)、響應(yīng)式網(wǎng)站、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容