powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Механизм транзакций. Spring MVC.
5 сообщений из 30, страница 2 из 2
Механизм транзакций. Spring MVC.
    #37916424
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tepka,
решение - в лоб:
Сначала читающая всё берёт всё в себя (список заданий) - конец транзакции.
Потом все кто хочит - пишут.
Т.е. вывести цикл наружу. Вроде так и Blazkowicz советовал
...
Рейтинг: 0 / 0
Механизм транзакций. Spring MVC.
    #37916456
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле тут два класса просятся ещё из-за Single Responsibility Principle. Один класс отвечает именно за Scheduled Job. Второй класс за реюзабельную бизнес-транзакцию.
Из-за того что слишком много всего разрешено делать через аннотации и появляются такие проблемы.
...
Рейтинг: 0 / 0
Механизм транзакций. Spring MVC.
    #37916482
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос интересный.
Тут по логике можно сделать 2 варианта (я по ГУИ делал через галочку)
А - откатить все задания (миллион) при ошибке на любом
Б - не откатывать при ошибке на любом. Т.е. что было сделано то прошло.

Вот для реализации этой штуки и нужно, разделение на верхнего менеджера-сервиса без транзакции и внутренних шедулеров.

Сейчас по коду процедура должна откатить весь миллион - на ней аннотация. Но по факту не откатит (ТС хочет).
...
Рейтинг: 0 / 0
Механизм транзакций. Spring MVC.
    #37916518
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczНа самом деле тут два класса просятся ещё из-за Single Responsibility Principle. Один класс отвечает именно за Scheduled Job. Второй класс за реюзабельную бизнес-транзакцию.
Из-за того что слишком много всего разрешено делать через аннотации и появляются такие проблемы.
Да ты прав конечно. Если следовать принципу SOLID то надо да, два класса. То грубо говоря получится по дурацки) По сути два класса по одному методу.

Что то типа:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
@Service
public class PostingService {    
    @Autowired
    private PostingDAO postingDAO;    

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void postingSchedule(PostingScheduleEntity postingScheduleEntity) throws Exception{        
        Publication publication = new Publication(postingScheduleEntity, field);
        if (publication.isPublish()){
            byte success = 1;
            postingScheduleEntity.setStatus(success);
            postingDAO.saveOrUpdate(postingScheduleEntity);
            content.setSuccess(publication);
        }else {
            byte failed = 2;
            postingScheduleEntity.setStatus(failed);
            postingDAO.saveOrUpdate(postingScheduleEntity);
        }
    }
}

@Service
public class PostingSchedule {
    @Autowired
    private PostingDAO postingDAO;    
	
    @Scheduled(fixedDelay= 60000)
    @Transactional
    public void doProcessing(){            
                List<PostingScheduleEntity> postingScheduleList = postingDAO.getAllPostingSchedule(new Timestamp(Calendar.getInstance().getTime().getTime()));                
                if (postingScheduleList.size()>0) {
                    for(int i=0;i<postingScheduleList.size();i++){
                        try{
                            postingSchedule(postingScheduleList.get(i));
                        }catch(Exception ex){
                            byte failed = 2;
                            postingScheduleList.get(i).setStatus(failed);
                            postingDAO.saveOrUpdate(postingScheduleList.get(i));                            
                        }
                    }                    
                }            
    }
}
...
Рейтинг: 0 / 0
Механизм транзакций. Spring MVC.
    #37916523
tepka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чутка не так

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
@Service
public class PostingSchedule {
    @Autowired
    private PostingDAO postingDAO;    
    
    @Autowired
    private PostingService postingService;    
	
    @Scheduled(fixedDelay= 60000)
    @Transactional
    public void doProcessing(){            
                List<PostingScheduleEntity> postingScheduleList = postingDAO.getAllPostingSchedule(new Timestamp(Calendar.getInstance().getTime().getTime()));                
                if (postingScheduleList.size()>0) {
                    for(int i=0;i<postingScheduleList.size();i++){
                        try{
                            postingService.postingSchedule(postingScheduleList.get(i));
                        }catch(Exception ex){
                            byte failed = 2;
                            postingScheduleList.get(i).setStatus(failed);
                            postingDAO.saveOrUpdate(postingScheduleList.get(i));                            
                        }
                    }                    
                }            
    }
}
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Механизм транзакций. Spring MVC.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]