我正在使用 mysql 數據庫和 kafka 作為消息服務運行 spring boot 應用程序(使用 chainedKafkaTransactionManager 為 kafka 和 mysql 進行事務同步)以進行一些異步操作。當多條消息到達 kafka 監(jiān)聽器時,舊數據來自數據庫而不是以前提交的數據。我正在使用 crud 存儲庫,而且這種情況只會同時發(fā)生在多條消息上示例:更新一個具有名稱和 ID 的對象 PERSON;第一條消息將通過 id 獲取對象并將名稱更新為 SAM。第二條消息將獲取對象并將名稱更新為 REGO第三條消息將獲取對象,然后如果我檢查它包含 SAM 作為名稱的數據,但在數據庫中它有 REGO。我嘗試添加隔離屬性作為事務中提交的讀取但沒有運氣// listeners @Autowiredprivate PersonRepository personRepository;@Autowiredprivate AddressRepository addressRepository; @KafkaListener(id = "update_name", topics = "update_name")@Transactional(readOnly = false)public void updateName(PersonModel personModel) { Person person = personRepository.findById(personModel.getId()); log.info("before -> name which is in database : " + person.getName()); person.setName(personModel.getName()); person = personRepository.save(person); log.info("after-> name which is in database : " + person.getName());}@KafkaListener(id = "update_name_and_address", topics = "update_name_and_address")@Transactional(readOnly = false)public void updateNameAndAddress(PersonModel personModel) { Address addr= addressRepository.findById(personModel.getAddresId); addr.setPlace(personModel.getPlace()); addressRepository.save(addr); updateName(personModel);}// repositorypublic interface PersonRepository extends CrudRepository<Person , Integer> {}我需要數據庫中的最新數據
spring jpa crud 存儲庫在多線程環(huán)境中從數據庫中獲取舊數據
慕的地8271018
2023-03-17 14:07:01