• 研究Quarkus出现的各种错误集锦


    Quarkus很酷,但这些错误一点不酷 :(

     学习内容参考

    https://developer.ibm.com/zh/articles/j-use-quarkus-to-develop-kubernetes-native-java-application/

    https://redhat-developer-demos.github.io/quarkus-tutorial/quarkus-tutorial/setup.html

     时隔多年又开始研究程序......

    0.一些基本操作

    • 生成应用
    mvn "io.quarkus:quarkus-maven-plugin:0.27.0.Final:create" 
         -DprojectGroupId=io.vividcode 
        -DprojectArtifactId=quarkus-demo 
        -DclassName="io.vividcode.quarkus.ExampleResource" 
        -Dpath="/example"

    不同的版本会报错误,1.4.2的发现不行,建立出来的pom.xml有问题
    因为要尝试部署到kubernetes,所以需要用新一点的版本。

    mvn io.quarkus:quarkus-maven-plugin:1.6.0.Final:create  -DprojectGroupId=io.vividcode     -DprojectArtifactId=quarkus-sample  -DclassName="io.vividcode.quarkus.ExampleResource"   -Dpath="/example"
    • list extension
    mvnw quarkus:list-extensions
    [INFO] Scanning for projects...
    [INFO]
    [INFO] --------------------< io.vividcode:quarkus-starter >--------------------
    [INFO] Building quarkus-starter 1.0-SNAPSHOT
    [INFO] --------------------------------[ jar ]---------------------------------
    [INFO]
    [INFO] --- quarkus-maven-plugin:0.27.0:list-extensions (default-cli) @ quarkus-starter ---
    Downloading from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-bom/0.27.0/quarkus-bom-0.27.0.json
    
    Current Quarkus extensions available:
    Quarkus - Core                                     quarkus-core
    ArC                                                quarkus-arc
    Quarkus - Caffeine - Runtime                       quarkus-caffeine
    JAXB                                               quarkus-jaxb
    Jackson                                            quarkus-jackson
    ....
    • 添加extension
    mvnw quarkus:add-extension -Dextensions=quarkus-spring-web,quarkus-spring-data-jpa
    mvnw quarkus:add-extension -Dextensions=quarkus-kubernetes,quarkus-container-image-jib

    1.mysql在windows上的安装以及找回密码

    在官网下载并解压64位版本,然后在根目录下加入my.ini文件

    [mysqld]
    basedir=D:\mysql-8.0.21-winx64\
    datadir=D:\mysql-8.0.21-winx64\data

    然后

    mysqld --initialize
    
    mysqld --install mysql8.0
    
    net start mysql8.0
    
    mysql -u root -p

    通过mysql一连,发现没密码了,接着做下一步

    net stop mysql8.0
    
    mysqld --shared-memory --skip-grant-tables
    
    mysql
    mysql>FLUSH PRIVILEGES
    
    mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'welcome1'
    
    mysql>quit

    把密码刷成 welcome1,然后登录

    mysql> create database quarkus;
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | quarkus            |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)

    2.通过JPA连接数据库时的报错

    mvn compile quarkus:dev
    .......
    
    mysql The server time zone value '?й???????' is unrecognized or represents more than one time zone.
    ........

    需要修改application.properties文件,在url后面添加一串东西

    quarkus.datasource.url = jdbc:mysql://localhost:3306/quarkus?serverTimezone=UTC&characterEncoding=utf-8
    quarkus.datasource.driver = com.mysql.cj.jdbc.Driver
    quarkus.datasource.username = root
    quarkus.datasource.password = welcome1
    quarkus.hibernate-orm.dialect = org.hibernate.dialect.MySQL8Dialect
    quarkus.hibernate-orm.dialect.storage-engine = InnoDB
    quarkus.hibernate-orm.database.generation = drop-and-create

    3.基于CURL命令POST数据插入数据库

    按照官方文档,无耐怎么搞都是出错。

    curl -H "Content-Type:application/json"  -X POST --data '{"name":"Banana","price":2}' http://localhost:8080/product

    在postman上倒是成功了,目前没发现为啥命令行不行

     4.windows 10上的native build

    按照文档,装完vs_BuildTools.exe,vc++ 2017, windows kit

    装完Graalvm,修改完JAVA_HOME等环境变量,然后进入项目目录

    call "d:Program Files (x86)Microsoft Visual Studio2017BuildToolsVCAuxiliaryBuildvcvars64.bat" && mvn package -Pnative

    然后

    [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on OpenJDK 64-Bit Server VM GraalVM CE 20.1.0
    [INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] D:graalvm-ce-java8-20.1.0in
    ative-image.cmd -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-DCoordinatorEnvironmentBean.transactionStatusManagerEnable=false -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=1 --initialize-at-build-time= -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar quarkus-starter-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+ReportExceptionStackTraces -H:+AddAllCharsets -H:EnableURLProtocols=http,https --enable-all-security-services -H:+JNI -H:-UseServiceLoaderFeature -H:+StackTrace quarkus-starter-1.0-SNAPSHOT-runner
    [quarkus-starter-1.0-SNAPSHOT-runner:17844]    classlist:  14,115.85 ms,  2.46 GB
    [quarkus-starter-1.0-SNAPSHOT-runner:17844]        setup:   1,704.89 ms,  2.46 GB
    Error: Unable to detect supported WINDOWS native software development toolchain.
    com.oracle.svm.core.util.UserError$UserException: Unable to detect supported WINDOWS native software development toolchain.
            at com.oracle.svm.core.util.UserError.abort(UserError.java:68)
            at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.<init>(CCompilerInvoker.java:72)
            at com.oracle.svm.hosted.c.codegen.CCompilerInvoker$WindowsCCompilerInvoker.<init>(CCompilerInvoker.java:93)
            at com.oracle.svm.hosted.c.codegen.CCompilerInvoker.create(CCompilerInvoker.java:84)
            at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:851)
            at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:536)
            at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:451)
            at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
            at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
            at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
            at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
            at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
    Error: Image build request failed with exit status 1
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  43.576 s
    [INFO] Finished at: 2020-08-10T23:26:43+08:00
    Unable to detect supported WINDOWS native software development toolchain.

    尝试切换字符集chcp 437等步骤,没有生效,暂时没有解决。

     5.生成镜像部署

    要用docker了,因为之前在windows上用docker遇到的各种坑,果断切换成rhel,又是一段狂装机。

    按照文档,需要在application.properties里面加入

    quarkus.container-image.registry=quay.io
    quarkus.container-image.group=jnie
    quarkus.container-image.name=quarkus-sample
    quarkus.container-image.tag=1.0-SNAPSHOT
    quarkus.kubernetes.service-type=load-balancer

    然后运行

     mvn clean package -DskipTests -Dquarkus.container-image.push=true
    [WARNING] [io.quarkus.container.image.jib.deployment.JibProcessor] Base image 'fabric8/java-alpine-openjdk11-jre' does not use a specific image digest - build may not be reproducible
    [INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] LogEvent [level=INFO, message=Docker config auths section defines credentials for quay.io]
    [INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] LogEvent [level=LIFECYCLE, message=Using credentials from Docker config (/root/.docker/config.json) for quay.io/jnie/quarkus-sample:1.0-SNAPSHOT]
    [INFO] [io.quarkus.kubernetes.deployment.KubernetesProcessor] Generated the Kubernetes manifests: 'kubernetes.json,kubernetes.yml' in '/root/lab/quarkus-sample/target/kubernetes'
    [INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] The base image requires auth. Trying again for fabric8/java-alpine-openjdk11-jre...
    [INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Using base image with digest: sha256:b459cc59d6c7ddc9fd52f981fc4c187f44a401f2433a1b4110810d2dd9e98a07
    [ERROR] [io.quarkus.container.image.jib.deployment.JibProcessor] I/O error for image [quay.io/jnie/quarkus-sample]:
    [ERROR] [io.quarkus.container.image.jib.deployment.JibProcessor]     java.net.SocketTimeoutException
    [ERROR] [io.quarkus.container.image.jib.deployment.JibProcessor]     Read timed out
    [INFO] [io.quarkus.container.image.jib.deployment.JibProcessor] Container entrypoint set to [java, -Dquarkus.http.host=0.0.0.0, -Djava.util.logging.manager=org.jboss.logmanager.LogManager, -cp, /app/resources:/app/classes:/app/libs/*, io.quarkus.runner.GeneratedMain]
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  06:07 min
    [INFO] Finished at: 2020-08-11T16:45:49+08:00
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.6.1.Final:build (default) on project quarkus-sample: Failed to build quarkus application: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
    [ERROR]     [error]: Build step io.quarkus.container.image.jib.deployment.JibProcessor#buildFromJar threw an exception: java.lang.RuntimeException: Unable to create container image
    [ERROR]     at io.quarkus.container.image.jib.deployment.JibProcessor.containerize(JibProcessor.java:153)
    [ERROR]     at io.quarkus.container.image.jib.deployment.JibProcessor.buildFromJar(JibProcessor.java:102)
    [ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    [ERROR]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    [ERROR]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    [ERROR]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    [ERROR]     at io.quarkus.deployment.ExtensionLoader$2.execute(ExtensionLoader.java:932)
    [ERROR]     at io.quarkus.builder.BuildContext.run(BuildContext.java:277)
    [ERROR]     at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    [ERROR]     at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2046)
    [ERROR]     at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1578)
    [ERROR]     at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
    [ERROR]     at java.base/java.lang.Thread.run(Thread.java:834)
    [ERROR]     at org.jboss.threads.JBossThread.run(JBossThread.java:479)
    [ERROR] Caused by: java.util.concurrent.ExecutionException: java.net.SocketTimeoutException: Read timed out
    [ERROR]     at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:552)
    [ERROR]     at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:513)
    [ERROR]     at com.google.common.util.concurrent.FluentFuture$TrustedFuture.get(FluentFuture.java:82)
    [ERROR]     at com.google.cloud.tools.jib.builder.steps.StepsRunner.realizeFutures(StepsRunner.java:94)
    [ERROR]     at com.google.cloud.tools.jib.builder.steps.StepsRunner.lambda$pushImages$11(StepsRunner.java:387)
    [ERROR]     at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
    [ERROR]     at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
    [ERROR]     at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
    [ERROR]     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    [ERROR]     at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    [ERROR]     at java.base/java.lang.Thread.run(Thread.java:834)
    [ERROR] Caused by: java.net.SocketTimeoutException: Read timed out
    [ERROR]     at java.base/java.net.SocketInputStream.socketRead0(Native Method)
    [ERROR]     at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)
    [ERROR]     at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168)
    [ERROR]     at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140)
    [ERROR]     at java.base/sun.security.ssl.SSLSocketInputRecord.read(SSLSocketInputRecord.java:448)
    [ERROR]     at java.base/sun.security.ssl.SSLSocketInputRecord.bytesInCompletePacket(SSLSocketInputRecord.java:68)

    里面调用了fabric类,发现问题是连接不上,

    然后换一种模式构建镜像,Dockerfile.jvm是在安装的时候自动生成的。

    docker build -f src/main/docker/Dockerfile.jvm  -t  quay.io/jnie/vividcode/quarkus-sample  .

    构建完成看一下

    [root@registry quarkus-sample]# docker images
    REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
    quay.io/jnie/vividcode/quarkus-sample         latest              5a6fb08704cf        10 seconds ago      549 MB
    registry.access.redhat.com/ubi8/ubi-minimal   8.1                 91d23a64fdf2        4 months ago        107 MB

    然后运行

    [root@registry docker]# docker run -i --rm -p 8080:8080 quay.io/jnie/vividcode/quarkus-sample:latest
    exec java -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager -XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/app.jar
    __  ____  __  _____   ___  __ ____  ______ 
     --/ __ / / / / _ | / _ / //_/ / / / __/ 
     -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /    
    --\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
    2020-08-11 09:14:13,165 INFO  [io.quarkus] (main) quarkus-sample 1.0-SNAPSHOT on JVM (powered by Quarkus 1.6.1.Final) started in 1.704s. Listening on: http://0.0.0.0:8080
    2020-08-11 09:14:13,242 INFO  [io.quarkus] (main) Profile prod activated. 
    2020-08-11 09:14:13,246 INFO  [io.quarkus] (main) Installed features: [cdi, kubernetes, resteasy]

    测试成功。

    还有各种大坑稍后逐步奉上...

  • 相关阅读:
    30 Day Challenge Day 12 | Leetcode 198. House Robber
    30 Day Challenge Day 12 | Leetcode 276. Paint Fence
    30 Day Challenge Day 12 | Leetcode 265. Paint House II
    30 Day Challenge Day 12 | Leetcode 256. Paint House
    30 Day Challenge Day 11 | Leetcode 76. Minimum Window Substring
    30 Day Challenge Day 11 | Leetcode 66. Plus One
    oracle之6过滤与排序
    oracle之5多行函数之过滤分组函数
    oracle之4多行函数之分组函数
    oracle之3单行函数之条件表达式
  • 原文地址:https://www.cnblogs.com/ericnie/p/13472870.html
Copyright © 2020-2023  润新知