powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring и Task Execution and Scheduling
16 сообщений из 16, страница 1 из 1
Spring и Task Execution and Scheduling
    #38374122
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Читаю по поводу создания функций которые будут выполнять одну и ту же работу , и вот возникли вопросы : http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html


1. К примеру у меня есть метод
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    @Scheduled(fixedDelay = 3 * 1000)
     public void execute() {
       List<Object> list =  getObjectToCancel();
       if(list != null && !list.isEmpty()){
           for (Object tObjectCancel : list) {
                 cancel(tObjectCancel);
           }
       }
     }



Код: xml
1.
<bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler" p:poolSize="30" id="threadPoolScheduler" />



execute - метод должен выполняться каждые 30 секунд и подчищать базу данных - операция в методе cancel(tObjectCancel); - может занять и больше 30 секунд ( очень сложная логика проверки каждого объекта перед его удалением) .

из Этого у меня вопрос :

как поведет себя ThreadPoolTaskScheduler ?
1)он будет ждать пока завершится этот тред и после этого - запустить его снова ?
2)он создаст еще один тред из пула и будет выполнять тоже задание при этом первый тред будет выполняться ?( со временем может получиться так что все подвинет ,когда весь пул исчерпается)
3)другое поведение?

объясните какое у него поведение ?


Как в этой же ситуации поведут себя другие реализации ?
1) Кварц
2) стандартная реализация java

что будет , если указать не fixedDelay , а fixedRate и cron ?
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374268
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Читаю по поводу создания функций которые будут выполнять одну и ту же работу , и вот возникли вопросы : http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html

Все вопросы в стиле "прочитайте за меня документацию". По этой же ссылке что вы привели рассказывается про Concurrent и Synchronized executor-ы.

Atum1как поведет себя ThreadPoolTaskScheduler ?
1)он будет ждать пока завершится этот тред и после этого - запустить его снова ?

Зависит от executor-а. Они все описаны по ссылке выше. Если это пул, то в пуле, наверняка более одного потока. Если есть свободные потоки, то ждать никто никого не будет. Если в пуле только один поток, то запустить вторую параллельную задачу при занятоп потоке никак не выйдет.

Atum12)он создаст еще один тред из пула

Вы понимаете что такое пул? Нет такого "создать из пула". Можно создать поток, если не превышен лимит пула. Можно взять поток из пула и вернуть обратно. Нельзя "создать из пула".

Atum1и будет выполнять тоже задание при этом первый тред будет выполняться ?( со временем может получиться так что все подвинет ,когда весь пул исчерпается)

Ну, если у вас все задачи бесконечные, то да. Пул достигнет своего предела и перестанет выдавать потоки. "все подвинет" никакого отношения к происходящему не имеет. Ничего не "подвинет". Задачи, которые выполняются, так и будут выполнятся. А новые не будут запускаться, потому что все потоки заняты. Что из этого "подвинет"?

Atum1Как в этой же ситуации поведут себя другие реализации ?
1) Кварц

Как настроить так и поведет.

Atum12) стандартная реализация java

Spring Scheduler не более чем удобная обертка над "стандартной реализацией".
Обычные таймеры в Java однопоточные. Что как бы намекает на ответ. А ScheduledThreadPoolExecutor это пул потоков. Что тоже и есть ответом на вопрос.


Atum1что будет , если указать не fixedDelay , а fixedRate и cron ?
Что на этот счет говорит документация?
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374283
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВсе вопросы в стиле "прочитайте за меня документацию". По этой же ссылке что вы привели рассказывается про Concurrent и Synchronized executor-ы.

Есть проблемы с английским языком :)

вот поэтому и разбираюсь.

Т.е в случае когда он не будет ждать завершения, а будет еще раз вызывать метод - в начале метода нужно определить флаг признак окончания ?! так

писал его или как static boolean в классе или как AtomicBoolean и входя в метод execute - проверять выполняет его кто-то или нет в данный момент?

если он true - то устанавливать его в false до окончания цикла,а потом сбрасывать в true !? так ?
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374288
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Т.е в случае когда он не будет ждать завершения, а будет еще раз вызывать метод - в начале метода нужно определить флаг признак окончания ?! так

Зачем?

Atum1писал его или как static boolean в классе или как AtomicBoolean и входя в метод execute - проверять выполняет его кто-то или нет в данный момент?

Цель какая??

[quot Atum1если он true - то устанавливать его в false до окончания цикла,а потом сбрасывать в true !? так ?[/quot]
Нафига???
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374290
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не подвинет ,а подвиснет - опечатка :)

Что из этого "подвинет"? - это "подвиснет" - или когда пул полностью задействует все свои потоки - он выбросит ошибку или будет выставлять новые задания в очередь , если конечно она предусмотрена реализацией ...
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374295
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Есть проблемы с английским языком :)

Стыдно должно быть. Я в школе help по турбо паскалю читал со словарём Мюллера на 300К слов. Представляете, на поиск каждого слова уходят минуты. А не 3 секунды, как сейчас. А в google translate вообще можно предложениями и абзацами переводить. Так что не аргумент.
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374297
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Это не подвинет ,а подвиснет - опечатка :)

Что из этого "подвинет"? - это "подвиснет" - или когда пул полностью задействует все свои потоки - он выбросит ошибку или будет выставлять новые задания в очередь , если конечно она предусмотрена реализацией ...
Всё зависит от реализации executor-а. Можно задать любое нужное поведение.
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374317
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вопросы поведения как раз меня и интересуют , первое что сделал - перевел все в гуглтранслите.

Но , провел тест - и понял что он работает последовательно - т.е. не начинает выполнять метод , а ждет завершения уже запущенного и после этого запускает его .

Просто под линуксом - ставил задачку под крон - там все просто было - каждую минуту - он вызывал процедурку ... если за 1 минуту она не отрабатывала - запускался еще один экземпляр и так до бесконечности ... чтобы этого избежать приходилось создавать в tmp файл - и по нему ориентироваться , есть файл - процесс работает , нет - запускается новый и отрабатывает итд.

тут думал будет аналогичное поведение, но кажется ошибся.
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374321
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разницу между Delay и Rate словарь не раскрывает?
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374340
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczРазницу между Delay и Rate словарь не раскрывает?

http://www.springbyexample.com.ua/2012/08/spring-task-scheduler.html

Прочитал ,Blazkowicz, спасибо за помощь :)
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #38374409
GregTk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAtum1Есть проблемы с английским языком :)

Стыдно должно быть. Я в школе help по турбо паскалю читал со словарём Мюллера на 300К слов. Представляете, на поиск каждого слова уходят минуты. А не 3 секунды, как сейчас. А в google translate вообще можно предложениями и абзацами переводить. Так что не аргумент.

Вот ведь были времена...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Spring и Task Execution and Scheduling
    #39033987
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос :
я создал задачу по расписанию ,но она отрабатывает дважды !!!

как вернуть нормальное поведение ?

ps

при фиксит fixedRate такая же картинка ...
кто вызывает задачу дважды ?


spring 4.1.*

проект сконфигурирован как javaconfig + jetty 9

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@EnableScheduling
@Service
public class ScheduledTasks {
    
    
     @Scheduled(fixedDelay = 5000)
     public void currentTime()  {
          System.out.printf( "time : %s\n" ,LocalTime.now());
         }
}



в логах вижу что отрабатывает два раза :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
..
time : 14:14:06.890
time : 14:14:07.272
time : 14:14:11.891
time : 14:14:12.272
time : 14:14:16.891
time : 14:14:17.272
time : 14:14:21.891
time : 14:14:22.273
..
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #39034363
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно вот тест :

14:00:32.317
14:00:32.417
14:00:35.318
14:00:35.417
14:00:38.318
14:00:38.418
14:00:41.318
14:00:41.418

Код: 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.
import java.time.LocalTime;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;


@Configuration
@EnableWebMvc
@EnableScheduling
public class WebConfig extends WebMvcConfigurerAdapter{
    
    
    @Scheduled(fixedDelay = 3000)
    public void time() {
        System.out.printf("%s\n", LocalTime.now());
    }
    
    public static class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

        @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{WebConfig.class};
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{WebConfig.class};
        }

        @Override
        protected String[] getServletMappings() {
            return new String[]{"/"};

        }

    }
    
}



вот pom.xml


Код: xml
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.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>ru.web.portal</groupId>
    <artifactId>OnlineScheduling</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>OnlineScheduling</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring.version>4.1.6.RELEASE</spring.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
    
    
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>7.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            
            
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.3.2.v20150730</version>
                <configuration>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                    <contextPath>/</contextPath>
                    <stopPort>12456</stopPort>
                    <stopKey>djisjdksjk</stopKey>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.nio.SelectChannelConnector">
                            <port>8080</port>
                            <minThreads>1</minThreads>
                            <maxThreads>2</maxThreads>
                            <maxIdleTime>60000</maxIdleTime>
                            <forwarded>true</forwarded>
                            <Host>0.0.0.0</Host>  
                        </connector>
                    </connectors>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>




Помогите решить проблему !

все что нашел Это ответ на

http://stackoverflow.com/questions/19777879/quartz-spring-double-execution-on-startup

Your ContextLoaderListener and DispatcherServlet are both loading the mvc-dispatcher-servlet.xml. Basically duplicating all your beans resulting in 2 executions as that is also duplicated.

Split your configuration into one that is being loaded by the ContextLoaderListener (containing your services, dao, timers etc.) and one loaded by the DispatcherServlet (containing only web related beans controllers, view resovlers etc.).

Or ditch the ContextLoaderListener altogether and only use the DispatcherServlet to load everything.
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #39034366
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Увидел нужно написать так :
Код: java
1.
2.
3.
4.
   @Override
        protected Class<?>[] getServletConfigClasses() {
            return null;
        }




тут вопрос , да все работает как часы - нет повторений , но getServletConfigClasses метод вроде как нужный?!
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #39034367
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... такое ощущение будто ты создал 2 экземпляра ScheduledTasks.
...
Рейтинг: 0 / 0
Spring и Task Execution and Scheduling
    #39034374
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonХм... такое ощущение будто ты создал 2 экземпляра ScheduledTasks.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
     @Override
        protected Class<?>[] getRootConfigClasses() {
            return new Class[]{WebConfig.class};
        }

        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[]{WebConfig.class};
        }



в Этом случае в дебаге как раз и видно что они создаются дважды - в разных потоках и отрабатывают практически одновременно ...

грабли на ровном месте ...
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring и Task Execution and Scheduling
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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