第二个问题:当elastic和mongo都有@Documnet注释时,如何注释模型类?现在我得到一个错误,认为它与这个问题有关:“找不到类的id属性”
@Document(indexName = "gold", type = "article")
@Document
public class GoldSnapShot {
public static final String TOPIC = "goldsnapshot";
Double ons;
Double gram18;
Double irec;
Double dollar;
@org.springframework.format.annotation.DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private DateTime timestamp;
最后,我将感谢任何关于最佳实践和更干净的编码的指导。
Spring Boot应用程序:
@EnableMongoRepositories("com.sames.samesgoldconsumer.Repository")
@EnableElasticsearchRepositories(basePackages = "com.sames.samesgoldconsumer.elasticsearch.Repository")
@SpringBootApplication
public class SamesGoldConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SamesGoldConsumerApplication.class, args);
}
}
Kafka消费者服务:
@Component
public class KafkaConsumerService {
private final GoldSnapShotMongoRepository goldSnapShotMongoRepository;
private final GoldSnapShotElasticRepository goldSnapShotElasticRepository;
private final Logger logger
= LoggerFactory.getLogger(KafkaConsumerService.class);
public KafkaConsumerService(GoldSnapShotMongoRepository goldSnapShotMongoRepository,
GoldSnapShotElasticRepository goldSnapShotElasticRepository) {
this.goldSnapShotMongoRepository = goldSnapShotMongoRepository;
this.goldSnapShotElasticRepository = goldSnapShotElasticRepository;
}
@KafkaListener(topics = "gold", groupId = AppConstants.GROUP_ID)
public void processMessage(GoldSnapShot goldSnapShot) {
logger.info(String.format("GoldSnapShot Received -> %s", goldSnapShot.toString()));
goldSnapShotMongoRepository.save(goldSnapShot);
goldSnapShotElasticRepository.save(goldSnapShot);
}
}
弹性配置:
@Configuration
public class ElasticConfig {
@Bean
public RestHighLevelClient client() {
ClientConfiguration clientConfiguration
= ClientConfiguration.builder()
.connectedTo("localhost:9200")
.build();
return RestClients.create(clientConfiguration).rest();
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() {
return new ElasticsearchRestTemplate(client());
}
}
Kafka 配置:
@EnableKafka
@Configuration
public class KafkaConfig {
// @Value("${spring.kafka.consumer.group-id}")
// private String brokers;
private final String brokers = "localhost:9092";
// @Value("${spring.kafka.bootstrap-servers}")
// private String groupId;
private final String groupId = "group-id";
@Bean
public ConsumerFactory<String, GoldSnapShot> consumerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, brokers);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, ErrorHandlingDeserializer.class);
props.put(ErrorHandlingDeserializer.VALUE_DESERIALIZER_CLASS, JsonDeserializer.class);
props.put(JsonDeserializer.VALUE_DEFAULT_TYPE, GoldSnapShot.class);
return new DefaultKafkaConsumerFactory<>(props);
}
@Bean
KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, GoldSnapShot>>
kafkaListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, GoldSnapShot> factory =
new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
return factory;
}
}
你真的需要在ES中存储整个对象吗?我只是想知道你能在es中做什么MongoDB不提供的搜索?数据中没有文本字段,只有数值和日期。
我强烈建议不要将同一类用于3个目的:从Kafka读取、存储到MongoDB和Elasticsearch。为SpringData模块定义单独的类,并编写映射器,将从Kafka读取的数据转换为单独的数据模型。
否则,您将在类上有两个不同的@Document
注释,其中一个需要完全限定。
至于 Elasticsearch 部分:您显然使用的是过时的 Spring Data Elasticsearch,在 4.1 版中删除了 @Document
的类型
参数。注解 @org.springframework.format.annotation.DateTimeFormat
在 SDE 中不起作用,您需要向该属性添加具有适当的 Elasticsearch 支持的日期时间格式的@Field
注解。
如错误所示,您需要提供一个用< code>@Id注释或命名为< code>id的属性,该属性包含该对象的唯一标识符(它可能为空,然后Elasticsearch将为此创建一个唯一的字符串值)。
我目前正在研究将多台机器中的节点添加到集群中。主节点应该是x. x. x.246,我要添加的数据节点是x. x. x.99。运行最新的elasticsearch 7.6。我已经确定这两个弹性是相同的版本。 代码有什么问题?我想我遵循了这个指示 新主节点配置的错误日志: 任何帮助或指示将不胜感激。谢谢你。
问题内容: 我有一个现有的Elasticsearch索引,我想添加一个分析器,但是当我执行此命令时 我得到一个错误 {“错误”:“ IndexAlreadyExistsException [[nuxeo]已经存在]”,“状态”:400} 所以我必须在添加或刷新同义词文件之前删除索引不是很聪明。添加分析器的简单方法是吗?还是至少要刷新它?谢谢 问题答案: 您需要先关闭索引,更新分析器设置,然后再打开
问题内容: RelativeLayout layout = new RelativeLayout(this); AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); View gameView = initializeForView(new MainGame(), config); 什么也没显
问题内容: 现在,我正在通过jquery加载iframe: 我有一个自定义样式表,希望将其应用于该页面。iframe中的页面不在同一域中,这就是为什么它很棘手的原因。我找到了允许您添加单个标签但不能添加整个样式表的解决方案。 编辑: 有问题的页面通过Mobile Safari 加载,因此跨域策略不适用。 问题答案: 基于解决方案您已经找到了如何将CSS应用于iframe?: 或更多jqueryis
问题内容: 我有一个gui,它的Panel包含一系列标签和TextField,并使用spring布局(这是mainPanel),而另一个Panel仅包含button(buttonPanel)。我正在尝试使我的mainPanel也具有垂直滚动条。我想实现我的GUI,以便在JFrame中有2个面板。mainPanel出现在框架的顶部,而buttonPanel出现在mainPanel的下方。 我的问题是
问题内容: 我正在尝试使用standard共享图像,可以使用以下代码在 Facebook , Twitter 和 Save Image 上 共享: 我还需要一件事, Instagram : 这两个代码分别工作正常,如何将 Instagram 添加到?有可能吗? 问题答案: 我认为将其他社交共享添加到您为Instagram编写的代码中会更加容易。“ .igo”扩展名是Instagram专有的,因此其