上下文
我已经在java中启动了一个个人项目Gradle作为构建系统,我想使用Dagger 2作为DI.这样做的主要原因是习惯了该库,并能够在更大的项目中轻松使用它.
我试过了什么
我已设法使用IntelliJ IDEA运行Google示例
问题
IntelliJ IDEA一直告诉我它无法解析生成的类(在本例中DaggerCoffeeApp_Coffee).不知道编写的代码是否正确(特别是在学习使用Dagger 2时),这有点烦人.
所有java类都与Google示例相同.这是我的build.gradle档案:
apply plugin: 'java'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile 'com.google.dagger:dagger:2.0.1'
compile 'com.google.dagger:dagger-compiler:2.0.1'
}
Run Code Online (Sandbox Code Playgroud)
题
有没有办法让IntelliJ IDEA识别DaggerCoffeeApp_Coffee为生成的类(因此可以通过`ctrl + left click实现它的实现)?
我有几种CompletionStage方法可以链接.问题是第一个的结果将决定是否应该执行下一个.现在,实现这一目标的唯一方法似乎是将"特殊"参数传递给next,CompletionStage因此它不会执行完整的代码.例如:
public enum SomeResult {
RESULT_1,
RESULT_2,
RESULT_3
}
public CompletionStage<SomeResult> someMethod(SomeArgument someArgument) {
return CompletableFuture.supplyAsync(() -> {
// loooooong operation
if (someCondition)
return validValue;
else
return null;
}).thenCompose(result -> {
if (result != null)
return someMethodThatReturnsACompletionStage(result);
else
return CompletableFuture.completedFuture(null);
}).thenApply(result -> {
if (result == null)
return ChainingResult.RESULT_1;
else if (result.someCondition())
return ChainingResult.RESULT_2;
else
return ChainingResult.RESULT_3;
});
}
Run Code Online (Sandbox Code Playgroud)
因为整个代码依赖于第一个代码someCondition(如果它是false结果将是RESULT_1,如果不是那么整个代码应该被执行)这个结构对我来说看起来有点难看.有没有办法决定是否应该执行2nd(thenCompose(...))和3rd(thenApply(...))方法?
非常简单直接的问题:
假设我们有这个管道(我认为没有更简单的例子):
node {
env.someEnvVariable = false
boolean asBoolean = env.someEnvVariable ?: false
def asDef = env.someEnvVariable ?: false
echo "asBoolean: $asBoolean" // prints true because of Jenkins
echo "asDef: $asDef" // prints false
}
Run Code Online (Sandbox Code Playgroud)
为什么????
将变量定义为boolean使 Jenkins 为其分配一个真值,但将其定义为def将其分配为真正的假值
詹金斯的true价值从何而来?
编辑:另一个例子:
node {
env.someEnvVariable = false
boolean someBoolean = false
def someVar = false
echo "envVar: ${env.someEnvVariable}" // prints false
echo "someBoolean: ${someBoolean}" // prints false
echo "someVar: ${someVar}" // prints false
if (env.someEnvVariable …Run Code Online (Sandbox Code Playgroud) 语境
我编写了几个小型的Kafka Connect连接器。一个每秒仅生成随机数据,另一个每秒将其记录在控制台中。它们与Schema Registry集成在一起,因此可以使用Avro序列化数据。
我使用Landoop提供的fast-data-dev Docker映像将它们部署到本地Kafka环境中
基本设置有效,并每秒产生一条记录的消息
但是,我想更改主题名称策略。默认一生成两个主题:
${topic}-key${topic}-value根据我的用例,我将需要生成具有不同模式的事件,这些事件最终会出现在同一主题上。因此,我需要的主题名称是:
${topic}-${keyRecordName}${topic}-${valueRecordName}根据文档,我的需求适合TopicRecordNameStrategy
我尝试了什么
我创建avroData用于发送值进行连接的对象:
class SampleSourceConnectorTask : SourceTask() {
private lateinit var avroData: AvroData
override fun start(props: Map<String, String>) {
[...]
avroData = AvroData(AvroDataConfig(props))
}
Run Code Online (Sandbox Code Playgroud)
然后用它来创建SourceRecord响应对象
该文档指出,为了在Kafka Connect中使用架构注册表,我必须在连接器配置中设置一些属性。因此,当我创建它时,将它们添加:
name=SampleSourceConnector
connector.class=[...]
tasks.max=1
key.converter=io.confluent.connect.avro.AvroConverter
key.converter.schema.registry.url=http://localhost:8081
value.converter=io.confluent.connect.avro.AvroConverter
value.converter.schema.registry.url=http://localhost:8081
key.subject.name.strategy=io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
value.subject.name.strategy=io.confluent.kafka.serializers.subject.TopicRecordNameStrategy
Run Code Online (Sandbox Code Playgroud)
问题
连接器似乎忽略了这些属性,并继续使用旧的${topic}-key和${topic}-value主题。
题
Kafka Connect应该支持不同的主题策略。我设法通过编写自己的版本AvroConverter和硬编码来解决此问题,该主题策略是我所需要的。但是,这似乎不是一种好方法,并且在尝试使用Sink …
avro apache-kafka apache-kafka-connect confluent-schema-registry