2012-07-03 2 views
0

Мне нужно создать индикатор выполнения в webapp. Мне нужен поток, который выполняет работу и контроллер, который проверяет этот поток, чтобы получить его статус.
Как установить его с помощью beans (внутри этой темы мне нужно автоувеличивать некоторые сервисы)? Могу ли я использовать поток как не-singleton bean?
Спасибо.Весенние бобы и нитки

+0

Какова область действия задачи «прогресс-бар»? эти потоки ограничены вашей сессией? –

ответ

0

Я бы создал для этого небольшой класс упаковки. У вас могут быть все ваши сеттеры в классе для обработки инъецированных услуг, вы можете использовать InitializingBean, чтобы начать поток, и вы можете вставлять bean-компонент в другие классы, чтобы они могли вызывать getters на volatile или . Что-то вроде:

public class ProgressBar implements InitializingBean, Runnable, DisposableBean { 
    private volatile int someField; 
    private Thread thread; 
    // start the thread after the properties are set 
    public void afterPropertiesSet() { 
     thread = new Thread(this); 
     // maybe make it a daemon thread 
     // thread.setDaemon(true); 
     thread.start(); 
    } 
    // stop it when spring is shutting down 
    public void destroy() { 
     thread.interrupt(); 
    } 
    public void run() { 
     ... thread code goes here 
    } 
    // spring setter 
    public void setSomeService(SomeService someService) { 
     this.someService = someService; 
    } 
    // getter used by other beans to get some value from this class 
    public int getSomeField() { 
     return someField; 
    } 
} 

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

+0

Но нить должна быть неэлементной? Как определить его с помощью аннотации? – Tobia

+0

Значит, вы хотите многих из них? Затем вы должны превратить его в «FactoryBean». http://blog.springsource.org/2011/08/09/whats-a-factorybean/ – Gray

+0

с реализацией выше может потребоваться стандартный новый ProgressBar() ;? – Tobia

Смежные вопросы