前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Quarkus学习四 - 项目开发到部署

Quarkus学习四 - 项目开发到部署

原创
作者头像
eeaters
修改2022-07-04 09:53:11
7680
修改2022-07-04 09:53:11
举报
文章被收录于专栏:阿杰阿杰
  • 写在前面
    • 项目信息
    • 响应式与命令式选择
  • 开发相关
    • 数据库配置
    • reactive-panache操作数据库<持久化、查多个表>
    • 如何使用到主键的自增以及字段的默认值
  • 部署相关(腾讯云)
    • JDK-18
    • Maven-3.8.6
    • git
    • 项目启动
    • 防火墙

写在前面

项目信息

响应式与命令式选择

  1. master分支: 命令式
  2. reactive_mode分支: 响应式

在使用响应式将基本功能开发完成后,当页面点击频率高时

  1. 前端报错: Provisional headers are shown
  2. 后端报错: io.vertx.core.impl.NoStackTraceThrowable

可能使用姿势不当,但是照着官网写的代码出现这样子多多少少也有quarkus的reactive不够稳定的因素吧. 因此后面改成了命令式编程模式.要交作业,没时间耗了…

开发相关

数据库配置

官方文档

这里有点小坑,reactive和命令式模式,数据库配置键值对的值竟然不相同

  1. reactive: mysql://127.0.0.1:3306/test
  2. 命令式: jdbc:mysql://127.0.0.1:3306/test

reactive-panache操作数据库<持久化、查多个表>

持久化示例:

代码语言:javascript
复制
    @POST
    @Path("/create")
    @Blocking
    public Uni<BaseResponse<Long>> create(ChannelAccount channelAccount) {
        //这里需要调用flush后,才能正确返回id, 单纯的persist可以正确保存但是无法返回自增的id
        Uni<ChannelAccount> persist = channelAccount.persistAndFlush();
        return persist.onItem()
                .transform(account -> account.getId())
                .onItem()
                .transform(BaseResponse::success);
    }

多表结果集返回:

代码语言:javascript
复制
    @GET
    @Produces(MediaType.TEXT_HTML)
    @Blocking
    public Uni<TemplateInstance> store(@QueryParam("name") String name) {
        Uni<List<Store>> storeListUni = Store.findAll().list();
        List<Store> storeList = storeListUni.await().indefinitely();

        Uni<List<DeliveryStrategy>> strategyListUni = DeliveryStrategy.findAll().list();
        List<DeliveryStrategy> strategyList = strategyListUni.await().indefinitely();

        return Uni.createFrom()
                .item(() -> {
                    TemplateInstance instance = store.data("storeList", storeList)
                            .data("strategyList", strategyList)
                            .data("name", name);
                    return instance;
                });

    }

如何使用到主键的自增以及字段的默认值

代码语言:javascript
复制
public class ChannelAccount extends PanacheEntityBase {
    //`id` bigint(20) NOT NULL AUTO_INCREMENT,
    //PRIMARY KEY (`id`)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    //`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    @Column(name = "create_time", insertable = false, updatable = false)
    private LocalDateTime createTime;

    //  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    @Column(name = "update_time", insertable = false, updatable = false)
    private LocalDateTime updateTime;

    }

部署相关(腾讯云)

JDK-18

采用wget进行安装;

步骤

功能

1.下载tar包

wget jdk官方的tar.gz包

解压

tar -zxvf tar.gz

配置环境变量

vi /etc/profile

配置生效

source /etc/profile

测试

java -version

代码语言:javascript
复制
export JAVA_HOME=/usr/java/jdk-18.0.1.1
export CLASSPATH=${JAVA_HOME}/lib:$CLASSPATH
export PATH=$PATH:${JAVA_HOME}/bin

Maven-3.8.6

maven同样操作wget命令来进行安装

步骤

功能

下载tar包

wget maven官方的tar.gz包

解压

tar -zxvf apache-maven-3.8.6-bin.tar.gz

配置环境变量

修改/etc/profile文件,添加环境变量

配置生效

source /etc/profile

查看版本

mvn -v

代码语言:javascript
复制
export MAVEN_HOME=/usr/maven/apache-maven-3.8.6
export PATH=$PATH:${MAVEN_HOME}/bin

git

sudo apt-get install git

作为服务器,能拉代码就成,因此采用https协议使用git命令进行项目的clone

项目启动

cd到项目的目录下

mvn quarkus:dev 这个属于开发模式,执行的效果就是没有效果,因为这个外部无法访问,正确的姿势是:

  1. mvn clean package -U -Dquarkus.package.type=uber-jar
  2. nohup java -jar target/{project}.jar

  • uber: 指的是将项目及其依赖进行打包
  • nobup: 指的是让项目后台运行, 直接java -jar是界面一关服务就没了

防火墙

云服务器的设置上将端口号暴露出来

此时可以再外网上正确访问到项目

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
    • 项目信息
      • 响应式与命令式选择
      • 开发相关
        • 数据库配置
          • reactive-panache操作数据库<持久化、查多个表>
            • 如何使用到主键的自增以及字段的默认值
            • 部署相关(腾讯云)
              • JDK-18
                • Maven-3.8.6
                  • git
                    • 项目启动
                      • 防火墙
                      相关产品与服务
                      云服务器
                      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档