網(wǎng)站首頁 編程語言 正文
目錄
自定義starter
為什么要自定義starter
自定義starter的命名規(guī)則
實(shí)現(xiàn)方法
引入依賴
編寫測試類
創(chuàng)建配置類
創(chuàng)建spring.factories文件
亂碼問題
解決方案:
??1. 使用yml配置文件進(jìn)行配置。
??2. 使用自定義配置文件如:
??3. 把中文換成對(duì)應(yīng)的ASCII碼。
自定義starter
SpringBoot中的starter是一種非常重要的機(jī)制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn) starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動(dòng)掃描到要加載的信息并啟 動(dòng)相應(yīng)的默認(rèn)配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。 SpringBoot會(huì)自動(dòng)通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊(cè)進(jìn)IOC容器。SpringBoot提供 了針對(duì)日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter依賴模塊。所有這些依賴模塊都遵循著約定 成俗的默認(rèn)配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。
為什么要自定義starter
在我們的日常開發(fā)工作中,經(jīng)常會(huì)有一些獨(dú)立于業(yè)務(wù)之外的配置模塊,我們經(jīng)常將其放到一個(gè)特定的 包下,然后如果另一個(gè)工程需要復(fù)用這塊功能的時(shí)候,需要將代碼硬拷貝到另一個(gè)工程,重新集成一 遍,麻煩至極。如果我們將這些可獨(dú)立于業(yè)務(wù)代碼之外的功能配置模塊封裝成一個(gè)個(gè)starter,復(fù)用的時(shí) 候只需要將其在pom中引用依賴即可,SpringBoot為我們完成自動(dòng)裝配,簡直不要太爽。
自定義starter的命名規(guī)則
SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。官方建議自定義的starter使用 xxx-spring-boot-starter命名規(guī)則。以區(qū)分SpringBoot生態(tài)提供的starter。
有了以上的了解后,來創(chuàng)建 Maven 項(xiàng)目,目錄結(jié)構(gòu)如下:
實(shí)現(xiàn)方法
實(shí)現(xiàn)自定義starter大致分一下幾步:
- 1.引入pom依賴
- 2.編寫測試用例類
- 3.創(chuàng)建自動(dòng)配置類
- 4.在resources包下增加配置文件
引入依賴
4.0.0
cn.mystylefree
custom-spring-boot-starter
1.0-SNAPSHOT
17
17
org.springframework.boot
spring-boot-autoconfigure
2.7.0
這里引入了自動(dòng)配置類
org.springframework.boot
spring-boot-autoconfigure
2.7.0
編寫測試類
在使用Spring官方的Starter時(shí)通??梢栽赼pplication.properties中來配置參數(shù)覆蓋掉默認(rèn)的值。即name的值會(huì)被配置文件中的值替換掉。
@EnableConfigurationProperties({PersonProperties.class}) //開啟ConfigurationProperties注解
@ConfigurationProperties(prefix = "person")
public class PersonProperties {
private int id;
private String name="章三";
}
省略set/get方法和toString方法
創(chuàng)建配置類
@Configuration
//當(dāng)類路徑classpath下有指定當(dāng)類 (SimpleBean) 的情況下進(jìn)行自動(dòng)配置
@ConditionalOnClass(PersonProperties.class)
public class MyAutoConfiguration {
static {
System.out.println("MyAutoConfiguration init ...");
}
@Bean
public PersonProperties personProperties(){
return new PersonProperties();
}
}
創(chuàng)建spring.factories文件
/META-INF/spring.factories文件放在/src/main/resources目錄下
注意:META-INF是自己手動(dòng)創(chuàng)建的目錄,spring.factories也是自己手動(dòng)創(chuàng)建的文件,在該文件中配置自己的自動(dòng)配置類。
一定要按照下面的位置結(jié)構(gòu)添加
文件中的內(nèi)容如下
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.mystylefree.config.MyAutoConfiguration
這時(shí)配置都加好了
只需從新打下包就行
mvn clean install
我們自己設(shè)置的starter包就保存到本地的maven倉庫了
接下來我們就能使用剛剛自定義的jar包實(shí)現(xiàn)pom依賴引用了
這是我的maven依賴地址
將這個(gè)依賴加入到新的項(xiàng)目中引入即可
這是我的一個(gè)新springboot項(xiàng)目
1.加入依賴
根據(jù)自己的名稱添加
cn.mystylefree
custom-spring-boot-starter
1.0-SNAPSHOT
2.設(shè)置application.properties
person.id=1
person.name=小米
由于設(shè)置的前綴名上person
3.添加測試用例
@SpringBootTest
class SpringBootDemoApplicationTests {
@Autowired
private PersonProperties personProperties;
@Test
void contextLoads() {
int id = personProperties.getId();
String name = personProperties.getName();
System.out.println(id+name);
}
}
這時(shí) 調(diào)試就能使用自定義的starter了
但是發(fā)現(xiàn)出現(xiàn)中文亂嗎了,不慌設(shè)置一下編碼格式
重新啟動(dòng)項(xiàng)目
亂碼問題
發(fā)現(xiàn)還是亂碼???
在Spring Boot項(xiàng)目中,有時(shí)候需要自定義一些配置,如果使用中文值并使用注解讀取時(shí)就會(huì)出現(xiàn)亂碼。
??原因: Spring Boot注解讀取application.properties或者application-{profile}.properties文件時(shí)默認(rèn)的是ISO_8859_1編碼。
解決方案:
??1. 使用yml配置文件進(jìn)行配置。
Spring Boot在讀取yaml配置文件時(shí)使用的是UTF-8的編碼方式。
??2. 使用自定義配置文件如:
custom.properties配置中文屬性,并使用@PropertySource(value="classpath:custom.properties", encoding="UTF-8")注解指定讀取的文件和編碼。代碼如下:
@Data
@ConfigurationProperties(prefix = "custom.user")
@PropertySource(value="classpath:custom.properties", encoding="UTF-8")
public class UserProperties {
// @Value("${custom.user.name}")
private String name;
// @Value("${custom.user.sex}")
private String sex;
}
使用@ConfigurationProperties和@Value均可以正常讀取。
??3. 把中文換成對(duì)應(yīng)的ASCII碼。
custom.user.sex=男
換成:
custom.user.sex=\u7537
以上三種方法均可以正常讀取配置文件中的中文字符。
如果覺得本文對(duì)你有幫助,歡迎點(diǎn)贊,歡迎關(guān)注我,如果有補(bǔ)充歡迎評(píng)論交流,我將努力創(chuàng)作更多更好的文章。
參考文檔:
Spring Boot使用@ConfigurationProperties或者@Value讀取properties文件中文亂碼_Qiwany的博客-CSDN博客??在Spring Boot項(xiàng)目中,有時(shí)候需要自定義一些配置,如果使用中文值并使用注解讀取時(shí)就會(huì)出現(xiàn)亂碼。原因: SpringBoot注解讀取application.properties或者application-{profile}.properties文件時(shí)默認(rèn)的是ISO_8859_1編碼。解決方案:??1. 使用yml配置文件進(jìn)行配置。Spring Boot在讀取yaml配置文件時(shí)使用的是UTF-8的編碼方式。??2. 使用自定義配置文件如:custom.properties配置中文屬性,并使用https://blog.csdn.net/Qiwan2/article/details/106333255
原文鏈接:https://blog.csdn.net/qq_29235677/article/details/125226948
- 上一篇:IDEA如何配置Tomcat
- 下一篇:C#異步編程的三種模式_C#教程
相關(guān)推薦
- 2022-10-25 c++標(biāo)準(zhǔn)模板庫:STL
- 2022-11-02 Python?IDLE設(shè)置清屏快捷鍵的方法詳解_python
- 2022-08-10 C#多線程之線程綁定ThreadLocal類_C#教程
- 2022-07-18 python中數(shù)組array和列表list的基本用法及區(qū)別解析_python
- 2022-05-07 Python中l(wèi)ist列表的賦值方法及遇到問題處理_python
- 2022-09-25 ORACLE數(shù)據(jù)庫數(shù)據(jù)泵的導(dǎo)入導(dǎo)出
- 2023-07-27 Android webview加載https鏈接錯(cuò)誤或無響應(yīng)的解決
- 2022-03-24 go語言開發(fā)環(huán)境配置(sublime?text3+gosublime)_Golang
- 欄目分類
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支