Как это возможно, что кеш Spring возвращает измененный объект? - PullRequest
1 голос
/ 25 февраля 2020

У меня есть этот тест:

@Test
    public void testCacheLineOfCredit() throws Exception {
        LineOfCreditInfo created = repository.save(this.getInfo());
        assertThat(created, is(notNullValue()));

        //First fetch read from DB
        LineOfCreditInfo firstSearch = service.fetch(created.getId());
        System.out.println("Created ID: " + created.getId() + " Date: " + created.getStartDate().toString());
        System.out.println("First ID:   " + firstSearch.getId() + " Date: " + firstSearch.getStartDate().toString());
        assertEquals(created.getStartDate(), firstSearch.getStartDate());
        Thread.sleep(100);
        LineOfCreditInfo updated = this.getInfo();
        updated.setId(created.getId());
        updated.setAgreement(created.getAgreement());
        repository.save(updated);

        //Second fetch read from cache
        LineOfCreditInfo secondSearch = service.fetch(created.getId());
        System.out.println("---------------------------------------");
        System.out.println("Updated ID: " + created.getId() + " Date: " + created.getStartDate().toString());
        System.out.println("Second ID:  " + secondSearch.getId() + " Date: " + secondSearch.getStartDate().toString());

    }

Ну, вывод System.out таков:

Object read from database
Created ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.181+01:00[Europe/Berlin]
First ID:   c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.181+01:00[Europe/Berlin]
---------------------------------------
Updated ID: c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.464+01:00[Europe/Berlin]
Second ID:  c7e635c6-6024-4149-9f92-74316c149800 Date: 2020-02-25T16:22:01.464+01:00[Europe/Berlin]

Как возможно, что вторая Дата Id равна на обновленном объект, если это читается из кеша?

В сервисе есть system.out, который записывает только в первую выборку, правильно.

Это метод сервиса:

@Cacheable(value = "lineOfCredits")
    public LineOfCreditInfo fetch(String id) throws ContextOutOfDomainException {
        InvoiceFinancingContext context = contextFactory.getObject();
        log.info(String.format("Object read from database: Id[%s]", id));

        Optional<LineOfCreditInfo> lineOfCreditInfo = repository.findByIdAndDomainId(id, context.getDomainId());
        System.out.println("Object read from database");
        return lineOfCreditInfo.get();
    }

1 Ответ

1 голос
/ 25 февраля 2020

Я думаю, что вы пытались напечатать здесь "обновленный" объект:

System.out.println("Updated ID: " + updated.getId() + " Date: " + updated.getStartDate().toString());

А не "созданный" в "Обновленном идентификаторе", как ваш текущий код:

 System.out.println("Updated ID: " + created.getId() + " Date: " + created.getStartDate().toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...