我在 Spring Boot 应用程序中使用 Kafka。我想在一笔交易中执行操作,如下所示。
listen(){
produce()
saveInDb()
}
Run Code Online (Sandbox Code Playgroud)
和
operation(){
saveInDB()
produce()
}
Run Code Online (Sandbox Code Playgroud)
我已经使用以下配置启用了 Kafka 事务
spring:
kafka:
bootstrap-servers: localhost:19092,localhost:29092,localhost:39092
producer:
transaction-id-prefix: tx-
consumer:
enable-auto-commit: false
isolation-level: read_committed
Run Code Online (Sandbox Code Playgroud)
并使用此配置
@Bean
public ProducerFactory<String, Object> producerFactory() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
DefaultKafkaProducerFactory<String, Object> factory = new DefaultKafkaProducerFactory<>(props);
factory.setTransactionIdPrefix("tx-");
return factory;
}
@Bean
public KafkaTransactionManager kafkaTransactionManager() {
KafkaTransactionManager manager = new KafkaTransactionManager(producerFactory());
return manager;
}
@Bean
public KafkaTemplate<String, Object> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory()); …
Run Code Online (Sandbox Code Playgroud) 我有一个旧表,其中列的类型之一是 varchar 但其中包含所有数字。我不想更改表中的数据类型。我想更改实体中的列数据类型。
之前是字符串,现在我将其更改为整数,并且增删改查操作工作正常。这是很好的做法还是有其他方法可以做到这一点?示例代码:
前:
@Entity
public class TestEntity{
@Column(name = "Test")
private String test;
}
Run Code Online (Sandbox Code Playgroud)
现在:
@Entity
public class TestEntity{
@Column(name = "Test")
private Integer test;
}
Run Code Online (Sandbox Code Playgroud)