Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94

Spring+hibernate thread on start (put in db)

24.12.2014, 02:05. Показов 1067. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Дело в том, что мне надо некоторую информацию регулярно записывать в базу данных. То есть что бы поток запустился как только стартует проект.
Вот мой класс с потоком.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class SaveCurrentRate extends Thread{
    @Autowired
    private RateService rateService;
 
    private static CurrentInform current = new CurrentInform();
    public String getTime () throws IOException {
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = new Date();
    return (dateFormat.format(date).toString());
       }
    public String getNeedTime () throws IOException {
    DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
    Date date = new Date();
    return (dateFormat.format(date).toString());
       }
    public void save() throws IOException {
     
        rateService.addRate(savePrivat());
        rateService.addRate(savePravex());
        rateService.addRate(savePUMB());
        rateService.addRate(saveUkrSib());
        rateService.addRate(saveXBank());
 
 
    }
    public Rate savePrivat() throws IOException {
        System.out.println("in private");
        Rate putInBase = new Rate(1,getTime(),current.getPrivatUSDbuy(),current.getPrivatUSDsell(),current.getPrivatEURbuy(),current.getPrivatEURsell());
        System.out.println("after rate creation");
        return putInBase;
    }
    public Rate savePravex() throws IOException {
        Rate putInBase = new Rate(2,getTime(),current.getPravexUSDbuy(),current.getPravexUSDsell(),current.getPrivatEURbuy(),current.getPravexEURsell());
        return putInBase;
    }
    public Rate saveUkrSib() throws IOException {
        Rate putInBase = new Rate(3,getTime(),current.getUKRSIBBNAKUSDbuy(),current.getUKRSIBBNAKUSDsell(),current.getUKRSIBBNAKEURbuy(),current.getUKRSIBBNAKEURsell());
        return putInBase;
    }
    public Rate saveXBank() throws IOException {
        Rate putInBase = new Rate(4,getTime(),current.getXCityUSDbuy(),current.getXCityUSDsell(),current.getXCityEURbuy(),current.getXCityEURsell());
        return putInBase;
    }
    public Rate savePUMB() throws IOException {
        Rate putInBase = new Rate(5,getTime(),current.getPUMBUSDbuy(),current.getPUMBUSDsell(),current.getPUMBEURbuy(),current.getPUMBEURsell());
        return putInBase;
    }
    public void run() {
        System.out.println("opana run");
        while (true) {
            try {
                if(getNeedTime().equals("09:00:01") || getNeedTime().equals("00:53:01")){
                   SaveCurrentRate saveCurrentRate = new SaveCurrentRate();
                    saveCurrentRate.save();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
и вот класс в котором я вызываю поток.
Java
1
2
3
4
5
6
7
8
9
10
11
12
@Component
public class Initializer implements ApplicationListener<ContextRefreshedEvent>{
 
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        System.out.println("Yep, we are here");
        SaveCurrentRate saveCurrentRate = new SaveCurrentRate();
        saveCurrentRate.start();
 
        return;
    }
}
но почему-то выбрасывает ошибку
Java
1
2
3
Exception in thread "Thread-9" java.lang.NullPointerException
    at net.schastny.contactmanager.SaveInBase.SaveCurrentRate.save(SaveCurrentRate.java:56)
    at net.schastny.contactmanager.SaveInBase.SaveCurrentRate.run(SaveCurrentRate.java:92)
Просто видать не получает он объект
"@Autowired
private RateService rateService;"
92 строка: " saveCurrentRate.save();"
56 строка: "rateService.addRate(savePrivat());"

Подскажите пожалуйста, может я в принципе что-то не то делаю. Заранее благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2014, 02:05
Ответы с готовыми решениями:

Непонятки в Java. Chain method call. Thread.start() vs Thread.run()
Ребят, кто знает подскажите, изучаю Java уже 4 месяца, а до меня все не доходит вот к примеру такая запись, ...

Thread start. А остановить то не могу
Приветствую! В конструкторе класса MyClass() { Thread thr = new Thread(thrMethod);

QThread::start: Failed to create thread
При скачивание фалов выдает ошибку QThread::start: Failed to create thread.Как от нее избавиться? QNetworkRequest request; ...

5
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
24.12.2014, 02:19
Spring это не волшебство, он не работает поверх java, если ты написал new Thread() то спринг знать не знает что там есть какой-то объект и что ты там оказывается что-то для него аннотациями метил. Можешь обозвать свой SaveCurrentRate бином и получать его уже из спринга. Хотя я никогда не пробовал создать объект потока из спринга, но теоретически должно сработать.
0
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94
24.12.2014, 02:30  [ТС]
Gepar, я вот указал бин
XML
1
2
<beans:bean class="net.schastny.contactmanager.SaveInBase.SaveCurrentRate">
</beans:bean>
а вот насчет new Thread()...как его иначе запустить то?
0
 Аватар для Gepar
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
24.12.2014, 02:35
Ну где-то "снаружи" получить ApplicationContext, из него получить свой thread и вызвать run(), хоть бы в main или init если у тебя веб приложение. Создание объекта потока в виде static объекта внутри класса описывающего этот поток это весьма странный подход.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.12.2014, 13:55
Используйте таски. Работать самим с тредами в спринге это плохо.

http://docs.spring.io/spring/d... uling.html
0
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94
25.12.2014, 20:07  [ТС]
KEKCoGEN, сделал с помощью тасков. Но ничего не происходит.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
public class TaskExecutorExample {
 
    private class MessagePrinterTask implements Runnable {
        @Autowired
        private RateService rateService;
 
        private CurrentInform current = new CurrentInform();
 
        public String getNeedTime () throws IOException {
            DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
            Date date = new Date();
            return (dateFormat.format(date).toString());
        }
        public String getTime () throws IOException {
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return (dateFormat.format(date).toString());
        }
 
        public void save() throws IOException {
            if (rateService == null)
            {
                System.out.println("beda...");
            }
            rateService.addRate(savePrivat());
        }
 
        public Rate savePrivat() throws IOException {
            System.out.println("in private");
            Rate putInBase = new Rate(1,getTime(),current.getPrivatUSDbuy(),current.getPrivatUSDsell(),current.getPrivatEURbuy(),current.getPrivatEURsell());
            System.out.println("after rate creation");
            return putInBase;
        }
 
        public MessagePrinterTask(){}
 
        public void run() {
            while (true) {
                try {
                    if(getNeedTime().equals("09:00:01") || getNeedTime().equals("14:27:01")){
                        SaveCurrentRate saveCurrentRate = new SaveCurrentRate();
                        saveCurrentRate.save();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
 
    }
 
    private TaskExecutor taskExecutor;
 
    public TaskExecutorExample(TaskExecutor taskExecutor) {
        this.taskExecutor = taskExecutor;
    }
 
    public void doWork(){
        taskExecutor.execute(new MessagePrinterTask());
    }
 
}
XML
1
2
3
4
5
6
7
8
9
10
<beans:bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <beans:property name="corePoolSize" value="5" />
        <beans:property name="maxPoolSize" value="10" />
        <beans:property name="queueCapacity" value="25" />
    </beans:bean>
 
    <beans:bean id="taskExecutorExample" class="net.schastny.contactmanager.SaveInBase.TaskExecutorExample">
        <beans:constructor-arg ref="taskExecutor" />
    </beans:bean>
</beans:beans>
Добавлено через 9 часов 46 минут
Gepar, как снаружи вызвать ApplicationContext ?

Добавлено через 18 часов 48 минут
После некоторых поисков в просторах интернета вроде как лучше для моей цели использовать @Scheduled. Но все-равно что-то работает не так (точнее не реагирует у меня проект на "Scheduled").
Обновил хмл файл:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:beans="http://www.springframework.org/schema/beans"
             xmlns:mvc="http://www.springframework.org/schema/task"
             xmlns:task="http://www.springframework.org/schema/tx"
             xsi:schemaLocation="http://www.springframework.org/schema/mvc [url]http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd[/url]
            [url]http://www.springframework.org/schema/beans[/url] [url]http://www.springframework.org/schema/beans/spring-beans-3.0.xsd[/url]
            [url]http://www.springframework.org/schema/task/spring-task.xsd[/url]
            [url]http://www.springframework.org/schema/beans[/url]
            [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url]
            [url]http://www.springframework.org/schema/context[/url]
            [url]http://www.springframework.org/schema/context/spring-context.xsd[/url]
            [url]http://www.springframework.org/schema/tx[/url]
            [url]http://www.springframework.org/schema/tx/spring-tx.xsd[/url]
            [url]http://www.springframework.org/schema/task[/url]
            http://www.springframework.org/schema/task/spring-task.xsd">
 
    <task:annotation-driven/>
    <beans:bean id="scheduler" class="net.schastny.contactmanager.service.Scheluder"></beans:bean>
и вот написал класс:
Java
1
2
3
4
5
6
7
8
public class Scheluder {
 
    @Scheduled(fixedRate = 60000)
    public void clearTempFolder() {
        System.out.println("I am a schedule-method with fixed rate param.");
        System.out.println("Executes every 1 minute.");
    }
}
подскажите, что не так делаю?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2014, 20:07
Помогаю со студенческими работами здесь

Spring и Hibernate
Пытаюсь написать свой CRUD на спринге, никак не удается отловить вот этот баг: org.hibernate.HibernateException: createQuery is not valid...

Spring Hibernate
Всем привет! Народ, подскажите пожалуйста, хочу использовать представление из MS SQL в виде JPA. Таблицы: Клиент: инн название...

Hibernate or spring
Имеет ли смысл использовать hibernate или spring когда есть встроенный в томкате средство для БД? что будет быстрее работать, важна...

Spring + Hibernate
Во многих статьях, где описывается пример Spring MVC + Hibernate описывается @Service На пример: public interface ContactDAO { ...

Hibernate + Spring
написал конфигурационный файл... &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; &lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru