SpringBoot項(xiàng)目中這十個(gè)開發(fā)技巧,你都知道嗎?
環(huán)境:SpringBoot3.2.5
1. 使用Maven自動(dòng)擴(kuò)展屬性
通過使用資源過濾,你可以從 Maven 項(xiàng)目中自動(dòng)擴(kuò)展屬性。如果使用 spring-boot-starter-parent,就可以用 @..@ 占位符引用 Maven "project properties",如下示例:
pack:
app:
java-version: "java.version@"
springboot-version: "@project.parent.version@"
sourceEncoding: "@project.build.sourceEncoding@"
測(cè)試
@Value("${pack.app.java-version}")
private String javaVersion ;
@Value("${pack.app.springboot-version}")
private String springBootVersion ;
@Value("${pack.app.sourceEncoding}")
private String sourceEncoding ;
輸出結(jié)果
java-version: 17.0.9, springboot-version: 3.2.5, sourceEncoding: UTF-8
maven parent定義如下:
圖片
注:在生成環(huán)境下,你將無法看到上面的輸出結(jié)果,你需要做其它的配置,情況下面的第九條。
2. SpringApplication外部化配置
可以通過在 spring.main.* 中設(shè)置屬性來將配置外部化
spring:
main:
web-application-type: servlet
banner-mode: off
其它配置屬性如下
圖片
如果你通過編程的方式也設(shè)置了上面的屬性,如下:
SpringApplication app = new SpringApplication(Application.class) ;
app.setWebApplicationType(WebApplicationType.SERVLET) ;
app.setBannerMode(Mode.CONSOLE) ;
app.run(args) ;
那么配置文件中自定義配置優(yōu)先級(jí)高于代碼中設(shè)置。
注意看上面的配置屬性,我們還可以之多多個(gè)源配置(其實(shí)就是添加一些配置類而已)。
spring:
main:
sources:
- com.pack.CustomConfig
- com.pack.AkfConfig
不通過編碼,之間通過配置文件像容器中添加2個(gè)配置類。
3. 修改配置文件位置&名稱
我們可以通過以下系統(tǒng)屬性(或環(huán)境變量)來更改行為:
- spring.config.name (SPRING_CONFIG_NAME)默認(rèn)是application為名稱
- spring.config.location (SPRING_CONFIG_LOCATION)要加載的文件(如 classpath 資源或 URL)。為該文件設(shè)置了一個(gè)單獨(dú)的環(huán)境屬性源,它可以被系統(tǒng)屬性、環(huán)境變量或命令行覆蓋。
在應(yīng)用啟動(dòng)時(shí),我們需要制定系統(tǒng)屬性或者對(duì)應(yīng)的環(huán)境變量(上面的大寫),如下
java -Dspring.config.name=app -jar MyApp.jar
指定配置文件的名稱是app,啟動(dòng)時(shí)會(huì)自動(dòng)的加載app.yml或者app.properties配置
java -Dspring.config.locatinotallow=d:\xxxooo\app.yml -jar MyApp.jar
指定配置文件的路徑。
4. 激活配置文件
當(dāng)你有如下配置文件時(shí):
圖片
除默認(rèn)的applicaiton.yml配置文件外,還有其它針對(duì)不同環(huán)境的配置文件,你可以通過如下配置激活對(duì)應(yīng)的配置文件:
spring:
profiles:
active:
- dev
這里設(shè)置dev后上面的配置不僅會(huì)加載默認(rèn)的application.yml還會(huì)加載application-dev.yml配置文件。
當(dāng)你沒有激活任何配置時(shí)(沒有設(shè)置spring.profiles.active),在默認(rèn)情況下會(huì)加載default配置,如:application-default.yml。通過如下配置修改:
spring:
profiles:
default: dev
這樣配置后會(huì)加載application-dev.yml配置。
5. 設(shè)置父容器
在SpringMVC項(xiàng)目中默認(rèn)是有父子容器說法,在SpringBoot項(xiàng)目默認(rèn)是沒有父子容器,不過我們可以通過如下方式設(shè)置父子容器。
SpringApplicationBuilder builder = new SpringApplicationBuilder(Application.class) ;
// 這樣設(shè)置后,你當(dāng)前容器將是父容器;child內(nèi)部會(huì)再創(chuàng)建一個(gè)SpringApplicationBuilder同時(shí)設(shè)置是非web項(xiàng)目。
builder.child(ChildConfig.class) ;
// 這樣設(shè)置后,你當(dāng)前容器將是子容器。
builder.parent(ParentConfig.class) ;
builder.build().run(args) ;
不管是使用child還是parent,內(nèi)部創(chuàng)建的都是AnnotationConfigApplicationContext容器。
6. 修改默認(rèn)DispatcherServlet路徑
默認(rèn)情況下,所有接口訪問都從根目錄 (/) 進(jìn)行。你可以按如下修改默認(rèn)的訪問路徑:
spring:
mvc:
servlet:
path: /api
這樣配置后所有的請(qǐng)求都必須是/api/**開頭。
對(duì)于DispatcherServlet的定義,我們可以通過自定義DispatcherServletRegistrationBean bean方式實(shí)現(xiàn)。
@Bean(name = DEFAULT_DISPATCHER_SERVLET_REGISTRATION_BEAN_NAME)
public DispatcherServletRegistrationBean dispatcherServletRegistration() {
DispatcherServlet dispatcherServlet = new DispatcherServlet() ;
// TODO; dispatcherServlet 相應(yīng)配置
DispatcherServletRegistrationBean registration = new DispatcherServletRegistrationBean(dispatcherServlet,
"/api") ;
registration.setName("dispatcherServlet") ;
registration.setLoadOnStartup(0) ;
return registration ;
}
該種方式實(shí)現(xiàn)更多的自定義配置。
7. 訪問日志配置
訪問日志可通過 Tomcat、Undertow 和 Jetty 各自的命名空間進(jìn)行配置。如下是對(duì)Tomcat配置。
server:
tomcat:
basedir: "pack-tomcat"
accesslog:
enabled: true
pattern: "%t %a %r %s (%D microseconds)"
日志的默認(rèn)位置是相對(duì)于 Tomcat 基本目錄的日志目錄。默認(rèn)情況下,日志目錄是一個(gè)臨時(shí)目錄,如果你要固定目錄,你可以安裝如上配置,日志位于 pack-tomcat/logs 中,相對(duì)于應(yīng)用程序的工作目錄。
8. 啟用 Tomcat 的 MBean 注冊(cè)表
嵌入式 Tomcat 的 MBean 注冊(cè)表默認(rèn)是禁用的。這最大限度地減少了 Tomcat 的內(nèi)存占用。如果你想使用 Tomcat 的 MBeans,例如讓 Micrometer 使用它們來公開度量指標(biāo),就必須使用 server.tomcat.mbeanregistry.enabled 屬性來實(shí)現(xiàn),如下例所示:
server:
tomcat:
mbeanregistry:
enabled: true
開啟以后,通過jconsole查看MBean信息,如下:
圖片
在這里你可以查看到Tomcat的各項(xiàng)指標(biāo)信息。
9. 生成構(gòu)建信息
Maven 插件和 Gradle 插件都允許生成包含項(xiàng)目坐標(biāo)、名稱和版本的構(gòu)建信息。這些插件還可以通過配置添加其他屬性。當(dāng)存在此類文件時(shí),Spring Boot 會(huì)自動(dòng)配置一個(gè) BuildProperties Bean。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>3.2.5</version>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
通過上面的配置,你在配置文件中使用的@...@就會(huì)得到生效。
10. 生成Git信息
Maven 和 Gradle 都允許生成一個(gè) git.properties 文件,其中包含項(xiàng)目構(gòu)建時(shí) git 源代碼倉(cāng)庫的狀態(tài)信息。添加如下插件:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
</plugin>
編譯打包項(xiàng)目后,在你的jar包中的classes下會(huì)包含一個(gè)git.properties信息。內(nèi)容如下(在控制臺(tái)也會(huì)輸出這些信息):
圖片
jar包中的classes目錄
圖片