5分鐘擁抱云原生 | SpringBoot 遷移至 Quarkus
Quarkus 是一個(gè)目前非常火的 Java 應(yīng)用開(kāi)發(fā)框架,定位是輕量級(jí)的微服務(wù)框架。,Quarkus 提供了優(yōu)秀的容器化整合能力,相較于傳統(tǒng)開(kāi)發(fā)框架(Spring Boot)有著更快的啟動(dòng)速度、更小的內(nèi)存消耗、更短的服務(wù)響應(yīng)。

本文將演示將 SpringBoot 應(yīng)用遷移至 Quarkus
Spring Boot 示例程序
使用 JPA 完成 數(shù)據(jù)庫(kù)的增刪改查操作,基礎(chǔ)代碼如下
maven 依賴(lài)
<dependency>
??<groupId>org.springframework.bootgroupId>
??<artifactId>spring-boot-starter-data-jpaartifactId>
dependency>
<dependency>
??<groupId>org.springframework.bootgroupId>
??<artifactId>spring-boot-starter-webartifactId>
dependency>
jpa crud
public?interface?DemoUserDao?extends?CrudRepository?{
}
遷移至 Quarkus
quarkus-bom 管理了全部 quarkus 插件 maven 版本信息,引入后所有依賴(lài)不需要再定義版本。
?<dependencyManagement>
??<dependencies>
???<dependency>
????<groupId>io.quarkusgroupId>
????<artifactId>quarkus-bomartifactId>
????<version>1.10.5.Finalversion>
????<type>pomtype>
????<scope>importscope>
???dependency>
??dependencies>
?dependencyManagement>
遷移 spring-web 、spring-jpa 至 quarkus 技術(shù)棧。
<dependency>
??<groupId>io.quarkusgroupId>
??<artifactId>quarkus-spring-data-jpaartifactId>
dependency>
<dependency>
??<groupId>io.quarkusgroupId>
??<artifactId>quarkus-spring-webartifactId>
dependency>
配置文件調(diào)整 (還是在 application.yml)
quarkus.datasource.db-kind=mysql
quarkus.datasource.jdbc.driver=com.mysql.cj.jdbc.Driver
quarkus.datasource.username=root
quarkus.datasource.password=root
quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/pig_demo?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=TRUE
Main 方法調(diào)整為 實(shí)現(xiàn) QuarkusApplication,且需要通過(guò)Quarkus.waitForExit()保持服務(wù)運(yùn)行。
@QuarkusMain
public?class?SimpleApplication?implements?QuarkusApplication?{
?public?static?void?main(String[]?args)?{
??Quarkus.run(SimpleApplication.class,args);
?}
?@Override
?public?int?run(String...?args)?{
??Quarkus.waitForExit();
??return?0;
?}
}
啟動(dòng)運(yùn)行
main 方法啟動(dòng), 輸出 Quarkus banner
__??____??__??_____???___??__?____??______
?--/?__?\/?/?/?/?_?|?/?_?\/?//_/?/?/?/?__/
?-/?/_/?/?/_/?/?__?|/?,?_/?,/?/_/?/\?\
--\___\_\____/_/?|_/_/|_/_/|_|\____/___/
2021-01-12?22:31:46,341?INFO??[io.qua.arc.pro.BeanProcessor]?(build-21)?Found?unrecommended?usage?of?private?members?(use?package-private?instead)?in?application?beans:
?-?@Inject?field?com.example.simple.controller.DemoController#userDao
2021-01-12?22:31:48,702?INFO??[io.quarkus]?(Quarkus?Main?Thread)?Quarkus?1.10.5.Final?on?JVM?started?in?4.613s.?Listening?on:?http://localhost:8080
2021-01-12?22:31:48,703?INFO??[io.quarkus]?(Quarkus?Main?Thread)?Profile?dev?activated.?Live?Coding?activated.
2021-01-12?22:31:48,703?INFO??[io.quarkus]?(Quarkus?Main?Thread)?Installed?features:?[agroal,?cdi,?hibernate-orm,?hibernate-orm-panache,?mutiny,?narayana-jta,?resteasy,?resteasy-jackson,?smallrye-context-propagation,?spring-data-jpa,?spring-di,?spring-web]
非常重要的是輸出了當(dāng)前已經(jīng)安裝的功能
Installed?features:?[agroal,?cdi,?hibernate-orm,?hibernate-orm-panache,?mutiny,?narayana-jta,?resteasy,?resteasy-jackson,?smallrye-context-propagation,?spring-data-jpa,?spring-di,?spring-web]
【擴(kuò)展】 actuator 監(jiān)控遷移
添加以下依賴(lài)
??io.quarkus
??quarkus-smallrye-health
指定訪(fǎng)問(wèn)監(jiān)控?cái)帱c(diǎn)路徑
quarkus.smallrye-health.root-path=/actuator/health
訪(fǎng)問(wèn)監(jiān)控檢查斷點(diǎn)測(cè)試
?curl?http://localhost:8080/actuator/health
{
????"status":?"UP",
????"checks":?[
????????{
????????????"name":?"Database?connections?health?check",
????????????"status":?"UP"
????????}
????]
}?
【擴(kuò)展】Flyway 遷移
添加 quarkus flyway 插件
??io.quarkus
??quarkus-flyway
指定插件啟動(dòng)策略即可
quarkus.flyway.migrate-at-start=true
往期推薦
評(píng)論
圖片
表情
