小编Pra*_*tic的帖子

为什么记录类不能用 Jackson 正确反序列化?

我正在为我的电报频道开发简单的机器人,并且正在使用 Java 16 功能,例如记录类。问题是我无法将传入请求反序列化到记录类中。我正在使用 Jackson 和 Micronaut 来设置客户端。这是我的课程:

用户记录

public record User(
        long id,
        boolean isBot,
        String firstName,
        String userName,
        boolean canJoinGroups,
        boolean canReadAllGroupMessages,
        boolean supportsInlineQueries) {
}
Run Code Online (Sandbox Code Playgroud)

Telegram回复记录

public record TelegramResponse<T>(T result, boolean ok) {
}
Run Code Online (Sandbox Code Playgroud)

TelegramApiClient 类

@Client("https://api.telegram.org/bot${bot.id}")
public interface TelegramApiClient {

    @Get("/getMe")
    TelegramResponse<User> getSelf();
}
Run Code Online (Sandbox Code Playgroud)

当我调用此方法时,我收到此错误:

16:22:52.916 [default-nioEventLoopGroup-1-2] ERROR i.m.h.s.netty.RoutingInBoundHandler - Unexpected error occurred: Error decoding HTTP response body: Error decoding stream for type [class com.praytic.TelegramResponse]: Can not set final java.lang.Boolean field com.praytic.User.supportsInlineQueries to java.lang.Boolean (through reference …
Run Code Online (Sandbox Code Playgroud)

java jackson

15
推荐指数
1
解决办法
1万
查看次数

即使在 Kafka 中进行轮询后,也不会发生当前的分区分配

我有使用 Apache Kafka 2.11-0.10.1.0 的 Java 8 应用程序。我需要使用该seek功能来处理poll来自分区的旧消息。但是,我No current assignment for partition每次尝试时都会遇到异常seekByOffset。这是我的班级,负责将seek主题添加到指定的时间戳:

import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.OffsetAndTimestamp;
import org.apache.kafka.common.PartitionInfo;
import org.apache.kafka.common.TopicPartition;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;

import java.time.Instant;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * The main purpose of this class is to move fetching point for each partition of the {@link KafkaConsumer}
 * to some offset which is …
Run Code Online (Sandbox Code Playgroud)

java apache-kafka kafka-consumer-api

10
推荐指数
1
解决办法
9936
查看次数

为什么线程表现出比协同程序更好的性能?

我编写了3个简单的程序来测试协程的线程性能优势.每个程序都进行了许多常见的简单计算.所有程序都是彼此分开运行的.除了执行时间,我通过Visual VMIDE插件测量CPU使用率.

  1. 第一个程序使用1000-threaded池进行所有计算.64326 ms由于频繁的上下文更改,这段代码显示了最差的结果()与其他结果相比:

    val executor = Executors.newFixedThreadPool(1000)
    time = generateSequence {
      measureTimeMillis {
        val comps = mutableListOf<Future<Int>>()
        for (i in 1..1_000_000) {
          comps += executor.submit<Int> { computation2(); 15 }
        }
        comps.map { it.get() }.sum()
      }
    }.take(100).sum()
    println("Completed in $time ms")
    executor.shutdownNow()
    
    Run Code Online (Sandbox Code Playgroud)

第一个计划

  1. 第二个程序具有相同的逻辑,但1000-threaded它不使用池,而是仅使用n-threaded池(其中n等于机器核心的数量).它显示了更好的结果(43939 ms)并且使用更少的线程,这也是好的.

    val executor2 = Executors.newFixedThreadPool(4)
      time = generateSequence {
      measureTimeMillis {
        val comps = mutableListOf<Future<Int>>()
        for (i in 1..1_000_000) {
          comps += executor2.submit<Int> …
    Run Code Online (Sandbox Code Playgroud)

benchmarking kotlin kotlin-coroutines

9
推荐指数
2
解决办法
4146
查看次数

如何返回 Deferred 并立即得到结果?

我有一个条件语句,Deferred在这两种情况下都应该返回结果,但我不知道如何手动创建Deferred具有预定义结果的对象。这是代码快照:

val deferredResult = if (condition) {
   callSuspendFunction(params)
} else {
  deferred???
}
Run Code Online (Sandbox Code Playgroud)

callSuspendFunction返回运算结果async。虽然我可以写类似coroutineScope { async { result } }而不是的东西deferred???,但它看起来确实不应该是这样。

coroutine kotlin

7
推荐指数
1
解决办法
4063
查看次数

如何使用“gsutil”复制文件夹?

我已经阅读了有关该gsutil cp命令的文档,但仍然不明白如何复制文件夹以保持相同的权限。我试过这个命令:

gsutil cp gs://bucket-name/folder1/folder_to_copy gs://bucket-name/folder1/new_folder
Run Code Online (Sandbox Code Playgroud)

但它导致错误:

CommandException: No URLs matched
Run Code Online (Sandbox Code Playgroud)

虽然,当我在每个名称的末尾使用斜杠尝试它时,它没有显示任何错误:

gsutil cp gs://bucket-name/folder1/folder_to_copy/ gs://bucket-name/folder1/new_folder/
Run Code Online (Sandbox Code Playgroud)

但是,当我检查gsutil ls. 我究竟做错了什么?

google-cloud-storage gsutil google-cloud-platform

7
推荐指数
2
解决办法
1万
查看次数

如何使用带有 WSL2 项目的 Intellij IDEA 设置 gradle?

我在ubuntu wsl 中 克隆了一个项目\\wsl$\Ubuntu\home\username\project。在 Intellij IDEA Ultimate 2020.1.3 中打开它并尝试导入为 gradle 项目,但我收到了无信息的错误消息:在此处输入图片说明

这是我在 IDEA 中的 gradle 配置: 在此处输入图片说明

问题是我应该如何在 IDEA 中打开我的项目?

编辑:

来自导入项目的日志包含此堆栈跟踪。可能这会导致问题。

org.gradle.tooling.GradleConnectionException: Could not install Gradle distribution from 'https://services.gradle.org/distributions/gradle-6.5.1-all.zip'.
    at org.gradle.tooling.internal.consumer.DistributionFactory$ZippedDistribution.getToolingImplementationClasspath(DistributionFactory.java:139)
    at org.jetbrains.plugins.gradle.GradleConnectorService$DistributionWrapper.getToolingImplementationClasspath(GradleConnectorService.kt:287)
    at org.gradle.tooling.internal.consumer.loader.CachingToolingImplementationLoader.create(CachingToolingImplementationLoader.java:41)
    at org.gradle.tooling.internal.consumer.loader.SynchronizedToolingImplementationLoader.create(SynchronizedToolingImplementationLoader.java:44)
    at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.onStartAction(LazyConsumerActionExecutor.java:147)
    at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.run(LazyConsumerActionExecutor.java:129)
    at org.gradle.tooling.internal.consumer.connection.CancellableConsumerActionExecutor.run(CancellableConsumerActionExecutor.java:45)
    at org.gradle.tooling.internal.consumer.connection.ProgressLoggingConsumerActionExecutor.run(ProgressLoggingConsumerActionExecutor.java:61)
    at org.gradle.tooling.internal.consumer.connection.RethrowingErrorsConsumerActionExecutor.run(RethrowingErrorsConsumerActionExecutor.java:38)
    at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor.lambda$run$0(DefaultAsyncConsumerActionExecutor.java:62)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.io.IOException: Incorrect function
    at java.base/sun.nio.ch.FileDispatcherImpl.lock0(Native Method)
    at java.base/sun.nio.ch.FileDispatcherImpl.lock(FileDispatcherImpl.java:100)
    at java.base/sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1161)
    at java.base/java.nio.channels.FileChannel.tryLock(FileChannel.java:1165)
    at org.gradle.wrapper.ExclusiveFileAccessManager.access(ExclusiveFileAccessManager.java:55) …
Run Code Online (Sandbox Code Playgroud)

intellij-idea gradle windows-subsystem-for-linux

6
推荐指数
1
解决办法
3423
查看次数

kotlinx.coroutines 基本示例无法识别 GlobalScope.launch 提供的 CoroutineScope

我尝试使用最新的库版本运行https://github.com/Kotlin/kotlinx.coroutines/blob/master/docs/basics.md#your-first-coroutine示例,但出现错误“延迟”功能告诉我:

挂起函数“延迟”只能从协程或另一个挂起函数调用

当我运行代码时出现此错误:

Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/coroutines/jvm/internal/CoroutineImpl
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at com.example.MainKt.main(Main.kt:6)
Caused by: java.lang.ClassNotFoundException: kotlin.coroutines.jvm.internal.CoroutineImpl
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 13 more
Run Code Online (Sandbox Code Playgroud)

这是我的 gradle 配置:

buildscript {
    ext.kotlin_version = '1.3.0'
    repositories {
        jcenter()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin'

kotlin {
    experimental {
        coroutines …
Run Code Online (Sandbox Code Playgroud)

kotlin kotlinx.coroutines

5
推荐指数
1
解决办法
6662
查看次数

如何在 spring-boot 2.2.* 中将 @ConfigurationProperties bean 自动装配到 SpEL 表达式中?

我正在使用 spring boot 2.2.6,正如文档所述:

@ConfigurationProperties使用配置属性扫描或通过 注册 bean时@EnableConfigurationProperties,该 bean 具有常规名称:<prefix>-<fqn>,其中<prefix>是注释中指定的环境键前缀@ConfigurationProperties<fqn>是 bean 的完全限定名称。如果注释不提供任何前缀,则仅使用 bean 的完全限定名称。

上例中的 bean 名称是 acme-com.example.AcmeProperties。

但是,当我使用此 SpEL 时:@Scheduled(fixedDelayString = "#{@(mr-my.config.properties.ApplicationProperties).task.get(T(my.config.Constants).CONST).delay}")我收到错误:

Parameter 0 of constructor in my.controllers.Controller required a bean named 'mr' that could not be found.


Action:

Consider defining a bean named 'mr' in your configuration.
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

4
推荐指数
1
解决办法
2567
查看次数

由于 pom 依赖性,无法创建 JDA 项目的 JAR

我有一个带有 JDA API 的 Kotlin 项目,需要将其部署在 Heroku 环境上。为了实现这一点,我在build.gradle文件中创建了一个 JAR 任务。

jar {
    baseName = 'discord-stats-bot'
    version =  'v1'
    manifest {
        attributes('Main-Class': 'com.vchernogorov.discordbot.BotKt')
    }
    from {
        configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
    }
}
Run Code Online (Sandbox Code Playgroud)

但由于以下错误,我无法构建此 JAR 文件。

16:02:03 vchernogorov $ ./gradlew jar
:kaptGenerateStubsKotlin UP-TO-DATE
:kaptKotlin UP-TO-DATE
:compileKotlin UP-TO-DATE
:compileJava UP-TO-DATE
:copyMainKotlinClasses UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:inspectClassesForKotlinIC UP-TO-DATE
:jar

FAILURE: Build failed with an exception.

* What went wrong:
Could not expand ZIP '/Users/vchernogorov/.gradle/caches/modules-2/files-2.1/club.minnced/opus-java/1.0.4/596995aaf2f5b5091c4d251fdc11fa62680cc59e/opus-java-1.0.4.pom'.
> archive is …
Run Code Online (Sandbox Code Playgroud)

dependencies build gradle kotlin build.gradle

2
推荐指数
1
解决办法
1372
查看次数

Spring 控制器处理程序方法中未注释参数的目的是什么?

假设我有一个 POST 处理程序方法:

@PostMapping("/group/{id}")
public OutParameters findRealTimeOrder(@RequestParam String anyParam,
                                       @RequestBody String payload,
                                       @PathVariable("id") String groupId,
                                       InParameters parameters) {
    return service.process(parameters);
}
Run Code Online (Sandbox Code Playgroud)

这里的所有注释都有描述性文档,所以我知道它们的目的是什么,但我不知道最后一个参数是什么。它与请求有什么关系?

java spring spring-mvc

1
推荐指数
1
解决办法
51
查看次数

如何在 kotlin 中制作 ScrollView

如何在代码中创建一个动态添加 TextViews 的 ScrollView?现在我有:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
>
<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Create TextView"
    />

<ScrollView
    android:id="@+id/Scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" />
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

作为布局文件,这是我的 kotlin 文件:

class Abfahrtsmonitor : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.abfahrtsmonitor)

    // Variable for counting text view
    var counter: Int = 1;

    // Set a click listener for button widget
    button.setOnClickListener{
        // Create a new TextView instance programmatically
        val text_view: TextView = TextView(this)

        // …
Run Code Online (Sandbox Code Playgroud)

android scrollview kotlin

1
推荐指数
1
解决办法
1万
查看次数