zoukankan      html  css  js  c++  java
  • Spring Boot 快速迁移至 Quarkus

    Quarkus 是一个目前非常火的 Java 应用开发框架,定位是轻量级的微服务框架。,Quarkus 提供了优秀的容器化整合能力,相较于传统开发框架(Spring Boot)有着更快的启动速度、更小的内存消耗、更短的服务响应。

    Quarkus 性能对比图

    本文将演示将 SpringBoot 迁移至 Quarkus

    Spring Boot 示例程序

    使用 JPA 完成 数据库的增删改查操作,基础代码如下

    • maven 依赖
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    • jpa crud
    public interface DemoUserDao extends CrudRepository<DemoUser, Long> {
    }
    

    迁移至 Quarkus

    • quarkus-bom 管理了全部 quarkus 插件 maven 依赖的版本信息,引入后所有依赖不需要再定义版本。
    
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>io.quarkus</groupId>
    				<artifactId>quarkus-bom</artifactId>
    				<version>1.10.5.Final</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    
    • 迁移 spring-web 、spring-jpa 至 quarkus 技术栈。
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-spring-data-jpa</artifactId>
    </dependency>
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-spring-web</artifactId>
    </dependency>
    
    • 配置文件调整 (还是在 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 方法调整为 实现 QuarkusApplication ,且需要通过 Quarkus.waitForExit() 保持服务运行。
    @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;
    	}
    }
    

    启动运行

    main 方法启动, 输出 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]
    
    

    非常重要的是输出了当前已经安装的功能

    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]
    

    【扩展】 actuator 监控迁移

    • 添加以下依赖
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-smallrye-health</artifactId>
    </dependency>
    
    • 指定访问监控断点路径
    quarkus.smallrye-health.root-path=/actuator/health
    
    
    • 访问监控检查断点测试
     curl http://localhost:8080/actuator/health
    {
        "status": "UP",
        "checks": [
            {
                "name": "Database connections health check",
                "status": "UP"
            }
        ]
    }⏎
    

    【扩展】Flyway 迁移

    • 添加 quarkus flyway 插件
    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-flyway</artifactId>
    </dependency>
    
    • 指定插件启动策略即可
    quarkus.flyway.migrate-at-start=true
    

    >>> 源码 https://gitee.com/log4j/pig,欢迎署名转载 <<<

  • 相关阅读:
    MVC3、如何应用EntityFramework 连接MySql 数据库 Kevin
    DEV EXPRESS Summary Footer 不显示 Kevin
    装饰模式 Kevin
    Dev 控件 GridControl 控件 二次绑定数据源的问题。 Kevin
    System.InvalidOperationException 异常 Kevin
    LINQ to XML Kevin
    代理模式——代码版“吊丝的故事” Kevin
    VS2012 中的设备 面板 Kevin
    maven 学习笔记(三)创建一个较复杂的 eclipse+android+maven 工程
    maven 学习笔记(一)eclipse+android+maven
  • 原文地址:https://www.cnblogs.com/leng-leng/p/14306766.html
Copyright © 2011-2022 走看看