開發(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的自動配置功能,步驟包括
- 在resource目錄下創(chuàng)建META-INF目錄
- 在目錄中創(chuàng)建spring.factories文件
- 在文件中指定自動配置項
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工具如下
通過install方法泛烙,可以把jar包安裝在本地maven倉庫(通常在C盤 user/.m2目錄)
然后在主項目的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項目啟動類自赔,包含了自動配置加載、組件掃描殴蓬、配置類掃描