(A) พฤติกรรมซิงโครนัสของการเรียก Spring jpa ด้วย CompletableFutures [ซ้ำกัน]

แก้ไข: เหตุผลนี้เป็นแคชระดับที่ 1 ตามที่อธิบายไว้ ที่นี่ วิธีแก้ไขคือการล้างข้อมูลด้วยตนเองหลังจากบันทึก

ฉันมีรหัสจาวาต่อไปนี้:

Player updatedPlayer = playerRepository.save(player);
CompletableFuture.runAsync(() -> {
    List<Player> players = playerRepository.findAllByToolId(updatedPlayer.getToolId());
    // Do something with players that takes some time
});

ฉันคาดหวังว่าผู้เล่นจะถูกแทรกลงในฐานข้อมูลผ่านทาง playerRepository หลังจากนั้นบรรทัดถัดไปที่มีฟังก์ชันอะซิงโครนัสแบบไม่ระบุชื่อจะถูกดำเนินการเท่านั้น ดังนั้นผู้เล่นที่แทรกไว้ควรรวมอยู่ในรายชื่อผู้เล่นเสมอ

แต่ดูเหมือนว่าจะเป็นกรณีที่บางครั้งผู้เล่นไม่อยู่ในรายชื่อและบางครั้งเขาก็อยู่ด้วย ใครช่วยอธิบายได้ไหมว่าทำไมถึงเป็นเช่นนั้น? หรือฉันกำลังทำอะไรผิด? ขอบคุณ!


person Philipp    schedule 14.06.2021    source แหล่งที่มา