Так что есть хранилище Spring JPA:@Transaction поведения весна JPA Repository
@Transactional(readOnly = true)
public interface UsageReportsRepository extends JpaRepository<UsageReports, Long> {
@Query(value = "select u from UsageReports u where u.username=:username AND u.requestType='USER_ACTIVITY' ORDER BY u.activityEndTime DESC")
public List<UsageReports> getLastActiveTime(@Param("username") String username, Pageable pageable);
}
и два фильтр, которые используют этот репозиторий.
public class UsageReportingInterceptor implements HandlerInterceptor {
@Autowired
private UsageReportsRepository usageReportsRepository;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// Do stuff
usageReportsRepository.save(usageReportsBean)
}
}
public class DumpToFile {
@Autowired
private UsageReportsRepository usageReportsRepository;
@Override
public boolean dumpToFile() throws Exception {
// Do stuff
List<UsageReports> usageReports = usageReportsRepository.findAll()
usageReportsRepository.deleteAll()
// Write to file
}
}
Я не чувствую необходимости в сервисном слое, поэтому я вызываю их непосредственно из своих фильтров. Один фильтр вставляет данные, используя этот репозиторий, а другой очищает данные и помещает их в файл. Оба они независимы и могут выполняться в произвольном порядке. Я хочу убедиться, что я не теряю никаких данных в этом процессе. Для этого достаточно аннотации @Transactional? Если нет, что еще мне делать?
Я думаю, что вы неправильно поняли пару вещей - Фильтры и транзакции. Лучший способ проверить, потеряете ли вы данные сейчас? Даже после нескольких запусков? Можете ли вы рассказать нам, почему, по вашему мнению, вы потеряете данные? – prabugp
Например, если есть вызов save() из UsageReportingInterceptor между findAll() и deleteAll() в классе DumptoFile. – n3o