亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Quarkus的Spring擴(kuò)展快速改造Spring項(xiàng)目

 更新時(shí)間:2022年02月23日 09:00:45   作者:kl  
這篇文章主要為大家介紹了Quarkus的Spring項(xiàng)目擴(kuò)展,帶大家快速改造Spring項(xiàng)目示例演繹,有需要的朋友可以借鑒參考下,希望能夠有所幫助

前言

博主上個(gè)禮拜,已經(jīng)實(shí)現(xiàn)了quarkus的native image應(yīng)用的上線,經(jīng)過(guò)兩天的監(jiān)控下來(lái),一切運(yùn)行指標(biāo)良好,就是內(nèi)存升到了100M了,這個(gè)后續(xù)繼續(xù)跟進(jìn)觀察。今天聊點(diǎn)老的spring應(yīng)用改造成quarkus的問(wèn)題。一個(gè)新的框架是否可以順利的在一個(gè)公司落地,除了本身優(yōu)秀的設(shè)計(jì)和優(yōu)異的性能外,框架的生態(tài)和上手的難度以及對(duì)現(xiàn)有框架的兼容性都是非常重要的考量因素,在quarkus之前,使用最廣泛的web框架就是spring webmvc框架了,數(shù)據(jù)訪問(wèn)層用的多的也是spring data jpa等。quarkus充分考慮了這種spring用戶的需求,官方出品了多個(gè)針對(duì)spring環(huán)境的遷移擴(kuò)展包,有了這些spring擴(kuò)展,可以非常輕松的從spring應(yīng)用遷移到quarkus平臺(tái)上來(lái)。

spring-webmvc擴(kuò)展

添加擴(kuò)展依賴

<dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-spring-web</artifactId>
</dependency>

兼容以下spring的注解用法

@RestController
@RequestMapping("/test")
public class TestController {
    @GetMapping("/hello")
    public String hello(@RequestParam("name") String name){
        return "hello" + name;
    }
    @PostMapping("/hello")
    public String hello1(@RequestBody Hello hello){
        return "hello" + hello.getName();
    }
    @GetMapping("/{name}")
    public String hello2(@PathVariable(name = "name") String name) {
        return "hello" + name;
    }
    class Hello{
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

以上示例了最基本的restfull接口用法,quarkus的spring-web擴(kuò)展常用的spring注解基本都支持了,但是使用時(shí)要注意,有些用法可能稍微有點(diǎn)不兼容,比如GET請(qǐng)求參數(shù)映射,純spring環(huán)境下,可以不用@RequestParam注解綁定,但是quarkus環(huán)境下就必須使用@RequestParam注解綁定入?yún)?,還有spring下的MultipartFile不支持,涉及到表單文件上傳的場(chǎng)景必須要改成JAX-RS的標(biāo)準(zhǔn)模式才行,這塊會(huì)單獨(dú)來(lái)寫。

spring-datajpa擴(kuò)展

添加擴(kuò)展依賴

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-spring-data-jpa</artifactId>
</dependency>

兼容以下spring-data-jpa的用法

public interface MovieRepository extends CrudRepository<Movie, Long> {
    Movie findFirstByOrderByDurationDesc();
    @Query("select m from Movie m where m.rating = ?1")
    Iterator<Movie> findByRating(String rating);
    @Query("from Movie where title = ?1")
    Movie findByTitle(String title);
    @Query("select m from Movie m where m.duration > :duration and m.rating = :rating")
    List<Movie> withRatingAndDurationLargerThan(@Param("duration") int duration, @Param("rating") String rating);
    @Query("from Movie where title like concat('%', ?1, '%')")
    List<Object[]> someFieldsWithTitleLike(String title, Sort sort);
    @Modifying
    @Query("delete from Movie where rating = :rating")
    void deleteByRating(@Param("rating") String rating);
    @Modifying
    @Query("delete from Movie where title like concat('%', ?1, '%')")
    Long deleteByTitleLike(String title);
    @Modifying
    @Query("update Movie m set m.rating = :newName where m.rating = :oldName")
    int changeRatingToNewName(@Param("newName") String newName, @Param("oldName") String oldName);
    @Modifying
    @Query("update Movie set rating = null where title =?1")
    void setRatingToNullForTitle(String title);
    @Query("from Movie order by length(title)")
    Slice<Movie> orderByTitleLength(Pageable pageable);
}

如下的接口定義都支持

org.springframework.data.repository.Repository

org.springframework.data.repository.CrudRepository

org.springframework.data.repository.PagingAndSortingRepository

org.springframework.data.jpa.repository.JpaRepository

Hibernate ORM使用物理命名策略和隱式命名策略來(lái)映射屬性名稱。如果您希望使用Spring Boot的默認(rèn)命名策略,spring-data-jpa擴(kuò)展包也提供了支持,只需要設(shè)置以下屬性:

quarkus.hibernate-orm.physical-naming-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

博主之前沒(méi)了解到spring擴(kuò)展之前,也遇到了相同的問(wèn)題,最后只能從spring將命名策略拷貝到本工程里。不得不說(shuō)quarkus想的還是蠻周到的

spring-Di擴(kuò)展

添加擴(kuò)展依賴

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-spring-di</artifactId>
</dependency>

兼容以下IOC用法

@Configuration
public class TestConfig {
    @Autowired
    private AccountRepository repository;
    @Value("${acc}")
    private String acc;
    @Bean
    AccountService accountService() {
        return new AccountService(repository);
    }
}

以上示例了最基礎(chǔ)的用法,聲明一個(gè)服務(wù)的@service、@Compoment等都支持,下面是支持的spring注解和JAX-RS的注解對(duì)照表

spring-boot-properties擴(kuò)展

添加擴(kuò)展依賴

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-spring-boot-properties</artifactId>
</dependency>

支持以下spring配置方式

@ConfigurationProperties("greeting")
public class GreetingProperties {
    public String text;
}

結(jié)語(yǔ)

quarkus的這些spring擴(kuò)展,看上去就和spring一樣,其實(shí)底層實(shí)現(xiàn)完全不一樣,quarkus并沒(méi)有引入spring的bean、context等容器上下文,這些擴(kuò)展僅僅是作為注解元數(shù)據(jù)信息使用而已。以上列舉了四種常見(jiàn)的spring使用擴(kuò)展支持,quarkus支持的擴(kuò)展還有Spring-Scheduled、Spring-CacheSpring-Security、Spring Cloud Config Server,這里就不一一列舉了,可以點(diǎn)擊鏈接查看官方的文檔。隨著quarkus社區(qū)的迭代,spring擴(kuò)展兼容支持會(huì)越來(lái)愈好越來(lái)越多,不過(guò)那個(gè)時(shí)候也有可能spring boot也追趕上了GraalVm,無(wú)論怎樣,對(duì)于我們開(kāi)發(fā)者而言,多個(gè)選擇總是好的。

以上就是Quarkus的Spring擴(kuò)展快速改造Spring項(xiàng)目的詳細(xì)內(nèi)容,更多關(guān)于Quarkus擴(kuò)展改造Spring項(xiàng)目的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java并發(fā)程序刺客之假共享的原理及復(fù)現(xiàn)

    Java并發(fā)程序刺客之假共享的原理及復(fù)現(xiàn)

    前段時(shí)間在各種社交平臺(tái)“雪糕刺客”這個(gè)詞比較火,而在并發(fā)程序中也有一個(gè)刺客,那就是假共享。本文將通過(guò)示例詳細(xì)講解假共享的原理及復(fù)現(xiàn),需要的可以參考一下
    2022-08-08
  • Java實(shí)現(xiàn)猜數(shù)字小游戲

    Java實(shí)現(xiàn)猜數(shù)字小游戲

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • SpringBoot?LiteFlow引擎框架使用原理解析

    SpringBoot?LiteFlow引擎框架使用原理解析

    LiteFlow是一個(gè)輕量且強(qiáng)大的國(guó)產(chǎn)規(guī)則引擎框架,可用于復(fù)雜的組件化業(yè)務(wù)的編排領(lǐng)域,本文給大家介紹SpringBoot?LiteFlow引擎框架的相關(guān)操作,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • Springboot @Validated和@Valid的區(qū)別及使用詳解

    Springboot @Validated和@Valid的區(qū)別及使用詳解

    這篇文章主要介紹了Springboot @Validated和@Valid的區(qū)別及使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java實(shí)現(xiàn)圖片轉(zhuǎn)base64字符串 java實(shí)現(xiàn)base64字符串轉(zhuǎn)圖片

    java實(shí)現(xiàn)圖片轉(zhuǎn)base64字符串 java實(shí)現(xiàn)base64字符串轉(zhuǎn)圖片

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖片轉(zhuǎn)base64字符串,java實(shí)現(xiàn)base64字符串轉(zhuǎn)圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟

    AutoGenerator 是 MyBatis-Plus 的代碼生成器,通過(guò) AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個(gè)模塊的代碼,極大的提升了開(kāi)發(fā)效率,本文將給大家介紹Mybatis-Plus實(shí)現(xiàn)自動(dòng)生成代碼的操作步驟
    2023-10-10
  • Java利用AQS實(shí)現(xiàn)自定義鎖

    Java利用AQS實(shí)現(xiàn)自定義鎖

    本文主要介紹了Java利用AQS實(shí)現(xiàn)自定義鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Spring Boot 3.0升級(jí)指南

    Spring Boot 3.0升級(jí)指南

    這篇文章主要為大家介紹了Spring Boot 3.0升級(jí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java開(kāi)發(fā)WMS倉(cāng)庫(kù)商品預(yù)警需求示例解析

    java開(kāi)發(fā)WMS倉(cāng)庫(kù)商品預(yù)警需求示例解析

    這篇文章主要為大家介紹了java開(kāi)發(fā)WMS倉(cāng)庫(kù)商品預(yù)警需求示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • springboot操作靜態(tài)資源文件的方法

    springboot操作靜態(tài)資源文件的方法

    這篇文章主要介紹了springboot操作靜態(tài)資源文件的方法,本文給大家提到了兩種方法,小編在這里比較推薦第一種方法,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07

最新評(píng)論