SpringBoot —— 開發(fā)自啟動的boot依賴包

開發(fā)環(huán)境

請見《項目部署及打包》

概述

本文主要記錄基于IDEA + Maven開發(fā)一個依賴SpringBoot的web項目包并提供給其他項目使用的過程,包括

  • 依賴SpringBoot web模塊
  • 配置SpringBoot項目自動加載Bean
  • 自定義的banner展示(banner文件)
  • 屬性文件讀然艚尽(兼容不同文件/格式/profiles)
  • 過濾器排序
  • 打包配置
  • 本地安裝
  • 附錄——SpringBoot注解

Juth2-Server

Juth2-Server 是一個基于SpringBoot開發(fā)的OAuth2鑒權(quán)服務(wù)端膀斋,下面會以該庫為例記錄相關(guān)內(nèi)容

pom配置

Juth2-Service是基于HTTP Filter Chain進行request合法驗證,涉及到Servlet湘换、Filter注解、Cors處理器等,最簡單的方式是直接引入starter-web依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

當然彩倚,還需要指定starter-parent筹我,否則你的所有依賴包都必須顯式指定版本

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.2</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

同樣也少不了其他相關(guān)依賴包。完成編碼后可以通過SpringBootApplication進行啟動

自動配置

指依賴包中的@Configuration可以跟隨SpringBoot自動啟動帆离,而無需額外配置蔬蕊。實現(xiàn)該功能需要啟用SpringBoot的自動配置功能,步驟包括

  1. 在resource目錄下創(chuàng)建META-INF目錄
  2. 在目錄中創(chuàng)建spring.factories文件
  3. 在文件中指定自動配置項
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xxx.Configuration1,\
com.xxx.Configuration2,\
...

banner展示

通常哥谷,SpringBoot可以在application.yml中指定banner文件路徑袁串。但打包后會被主程序的文件覆蓋,可以通過在@Configuration自動加載時讀取jar包中的banner文件顯示呼巷,比如Juth2-Server中

public Juth2Configuration(Juth2Properties juth2Properties, Environment environment) {
  //banner
  String version = this.getClass().getPackage().getImplementationVersion();
  ResourceBanner banner = new ResourceBanner(new ClassPathResource("/juth2-logo.txt"));
  banner.printBanner(environment, Juth2Configuration.class, System.out);
  System.out.println(" ".repeat(61) + version);
  juth2Properties.log();
}

Juth2Configuration使用了構(gòu)造注入來獲取Juth2屬性并打印屬性加載信息囱修,接著記錄如何在jar包中加載主項目的配置信息

加載屬性文件

SpringBoot項目可以自動識別 application.yml 或者 application.properties 或者 application-profile.yml 并按照優(yōu)先級組合文件中的屬性。想讓自己的jar包實現(xiàn)同樣的功能王悍,可以通過SpringBoot提供的屬性注解來實現(xiàn)破镰,包括

//實現(xiàn)讀取主項目 application 文件中的juth2開頭的屬性
@ConfigurationProperties(prefix = "juth2",ignoreInvalidFields = true)
//實現(xiàn)讀取獨立juth2配置文件
@PropertySources({
  //讀取yml文件,需要配置一個Yaml解析類
  @PropertySource(value = {"classpath:juth2.yml", "classpath:config/juth2.yml"}, factory = YamlPropertySourceFactory.class,ignoreResourceNotFound = true, encoding = "UTF-8"),
  //讀取properties文件
  @PropertySource(value = {"classpath:juth2.properties", "classpath:config/juth2.properties"}, ignoreResourceNotFound = true, encoding = "UTF-8")
})

將以上注解標注在屬性Bean上压储,SpringBoot會自動對實例屬性進行映射鲜漩,這樣就實現(xiàn)了banner中的Juth2屬性注入

過濾器排序

在SpringBoot中,可以通過注解來掛載一個過濾器集惋,比如

@Order(Ordered.LOWEST_PRECEDENCE)
@Component
public class MyFilter implements Filter {
}

通過增加@Component注解來掛載過濾器并通過@Order注解來指定順序孕似,但Order注解的參數(shù)無法使用變量。
另一種方法通過配置類并主動注冊來實現(xiàn)刮刑,比如

//配置類
@Configuration
public class FilterConfiguration {
    //注冊過濾器1
    @Bean
    public FilterRegistrationBean<Filter1> regFilter1() {
        final FilterRegistrationBean<Filter1> reg = new FilterRegistrationBean<>();

        reg.setFilter(new Filter1());
        reg.addUrlPatterns("/*");
        reg.setOrder(1);//排序

        return reg;
    }
    //注冊過濾器2
    @Bean
    public FilterRegistrationBean<Filter2> regFilter2() {
        final FilterRegistrationBean<Filter2> reg = new FilterRegistrationBean<>();

        reg.setFilter(new Filter2());
        reg.addUrlPatterns("/*");
        reg.setOrder(2);//排序

        return reg;
    }

}

打包配置

想要打包為類庫就不能使用默認的打包插件喉祭,如下

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

可以直接刪除build或者使用maven-jar插件,如下

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <includes>
                    <include>**/juth2server/**</include>
                    <include>**/*.txt</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
</build>

本地安裝

build好的jar包需要先在本地測試雷绢,IDEA自帶了maven工具如下


maven工具

通過install方法泛烙,可以把jar包安裝在本地maven倉庫(通常在C盤 user/.m2目錄)


本地maven倉庫

然后在主項目的pom文件中加入依賴,比如

<dependency>
    <groupId>com.github.holyhigh2</groupId>
    <artifactId>juth2-server</artifactId>
    <version>0.1.2-SNAPSHOT</version>
</dependency>

版本號由庫的pom文件決定并體現(xiàn)在本地庫中翘紊,比如


本地庫版本

然后就可以看到依賴庫中已經(jīng)安裝了依賴庫


依賴庫

附錄 - 常用注解

@Component - 標注組件類蔽氨,實現(xiàn)容器管理,是眾多注解的元注解
@Configuration - Bean的配置類帆疟,提供@Bean注入鹉究。使用@Component元注解
@Bean - 標注返回Bean實例的方法
@RestController - 為所有方法都實現(xiàn)了@ResponseBody的@Controller
@Controller - 標注MVC控制器類。使用@Component元注解
@RequestMapping - 標注控制器類/方法的路由地址
@Service - 標注服務(wù)類踪宠。使用@Component元注解
@Autowired - 標注需要被注入的Bean
@SpringBootApplication - 用來標注SpringBoot項目啟動類自赔,包含了自動配置加載、組件掃描殴蓬、配置類掃描

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匿级,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子染厅,更是在濱河造成了極大的恐慌痘绎,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肖粮,死亡現(xiàn)場離奇詭異孤页,居然都是意外死亡,警方通過查閱死者的電腦和手機涩馆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門行施,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人魂那,你說我怎么就攤上這事蛾号。” “怎么了涯雅?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵鲜结,是天一觀的道長。 經(jīng)常有香客問我活逆,道長精刷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任蔗候,我火速辦了婚禮怒允,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锈遥。我一直安慰自己纫事,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布所灸。 她就那樣靜靜地躺著儿礼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庆寺。 梳的紋絲不亂的頭發(fā)上蚊夫,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音懦尝,去河邊找鬼知纷。 笑死,一個胖子當著我的面吹牛陵霉,可吹牛的內(nèi)容都是我干的琅轧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼踊挠,長吁一口氣:“原來是場噩夢啊……” “哼乍桂!你這毒婦竟也來了冲杀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤睹酌,失蹤者是張志新(化名)和其女友劉穎权谁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憋沿,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡旺芽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐啄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片采章。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖壶辜,靈堂內(nèi)的尸體忽然破棺而出悯舟,到底是詐尸還是另有隱情,我是刑警寧澤砸民,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布图谷,位于F島的核電站,受9級特大地震影響阱洪,放射性物質(zhì)發(fā)生泄漏便贵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一冗荸、第九天 我趴在偏房一處隱蔽的房頂上張望承璃。 院中可真熱鬧,春花似錦蚌本、人聲如沸盔粹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舷嗡。三九已至,卻和暖如春嵌莉,著一層夾襖步出監(jiān)牢的瞬間进萄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工锐峭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留中鼠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓沿癞,卻偏偏與公主長得像援雇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子椎扬,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容