powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring: уничтожение бина
20 сообщений из 20, страница 1 из 1
Spring: уничтожение бина
    #39783585
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Аннотация @PostConstruct работает отлично.

Хочу проверить работу аннотации @PreDestroy.
Какое событие или действие вызовет метод closeSession(), аннотируемый @PreDestroy?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@SpringBootApplication
public class Sendersoap02Application {

    public static void main(String[] args) {
        SpringApplication.run(Sendersoap02Application.class, args);
    }
    
    @Bean
    CommandLineRunner initSession(SmppSession smppSession) {
        return args -> {
            
        };
    }
        
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class SmppSession {
    
    private static final Logger logger = LogManager.getLogger(SmppSession.class);
    
    public SmppSession() {
    }
    
    @PostConstruct
    public void openSession() {
        logger.info("Try to open session ...");
        logger.info("Session opened");
    }
    
    @PreDestroy
    public void closeSession() {
        logger.info("Try to close session ...");
        logger.info("Session closed");
    }
    
}
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39783713
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Try to close session ..."
"Session closed"
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39783714
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
context = SpringApplication.run(Sendersoap02Application.class, args);

Thread.sleep(10);
context.close();
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784418
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingcontext = SpringApplication.run(Sendersoap02Application.class, args);

Thread.sleep(10);
context.close();
Такой вариант:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@SpringBootApplication
public class Sendersoap02Application {

    public static void main(String[] args) throws InterruptedException {
        try (ConfigurableApplicationContext context = SpringApplication.run(Sendersoap02Application.class, args)) {
            SmppSession smppSession1 = context.getBean(SmppSession.class);
            Thread.sleep(10);
            context.close();
        }
    }

}


выдаёт следующее:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
2019-03-11 12:39:04.920  INFO 7900 --- [  restartedMain] r.s.s.Sendersoap02Application            : Starting Sendersoap02Application on A-PC with PID 7900 (C:\Dev\Develop\SenderSoap02\target\classes started by A in C:\Dev\Develop\SenderSoap02)
2019-03-11 12:39:04.920  INFO 7900 --- [  restartedMain] r.s.s.Sendersoap02Application            : No active profile set, falling back to default profiles: default
2019-03-11 12:39:04.952  INFO 7900 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2019-03-11 12:39:05.280  INFO 7900 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2019-03-11 12:39:05.295  INFO 7900 --- [  restartedMain] r.s.s.Sendersoap02Application            : Started Sendersoap02Application in 0.578 seconds (JVM running for 0.825)
2019-03-11 12:39:05.311  INFO 7900 --- [  restartedMain] ru.signalcom.sendersoap02.SmppSession    : Try to open session ...
2019-03-11 12:39:05.311  INFO 7900 --- [  restartedMain] ru.signalcom.sendersoap02.SmppSession    : Session opened
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 4.336s
Finished at: Mon Mar 11 12:39:06 MSK 2019
Final Memory: 17M/196M


т.е. при закрытии контекста @PreDestroy не вызывается:
Код: java
1.
2.
3.
4.
5.
    @PreDestroy
    public void closeSession() {
        logger.info("Try to close session ...");
        logger.info("Session closed");
    }
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784421
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, вызывается. И код у вас правильный. А причем тут build success?
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784423
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинMolasar, вызывается. И код у вас правильный. А причем тут build success?

p.s. context.close() можно и не вызывать вовсе ибо "подразумевается" что оно само будет вызвыано в данном случае.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784427
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинОзверинMolasar, вызывается. И код у вас правильный. А причем тут build success?

p.s. context.close() можно и не вызывать вовсе ибо "подразумевается" что оно само будет вызвыано в данном случае.
Почему тогда лог не выводится в консоль?:
Код: java
1.
2.
3.
4.
5.
    @PreDestroy
    public void closeSession() {
        logger.info("Try to close session ...");
        logger.info("Session closed");
    }
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784437
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, попробуйте из зависимостей убрать dev tools. А потом перезапустите...я думаю там у все порылось.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784445
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинMolasar, попробуйте из зависимостей убрать dev tools. А потом перезапустите...я думаю там у все порылось.
Убрал dev tools, не помогает.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784455
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чего он должен дестроиться? Дефолтный скоуп - синглтон. Он инстанциировался однажды и будет внедрен во все места.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784457
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинMolasar, попробуйте из зависимостей убрать dev tools. А потом перезапустите...я думаю там у все порылось.
Как это связано с жизненным циклом бинов?
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784462
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА чего он должен дестроиться? Дефолтный скоуп - синглтон. Он инстанциировался однажды и будет внедрен во все места.
Scope("prototype")
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Configuration
public class AppConfig {

    @Bean
    @Scope("prototype")
    public SmppSession getSmppSession() {
        return new SmppSession();
    }
    
}
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784467
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettА чего он должен дестроиться? Дефолтный скоуп - синглтон. Он инстанциировался однажды и будет внедрен во все места.

может потому, что контекст закрывается?
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784470
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HettОзверинMolasar, попробуйте из зависимостей убрать dev tools. А потом перезапустите...я думаю там у все порылось.
Как это связано с жизненным циклом бинов?

dev tools`ы связаны с тем, что делают "слишком много магии" при хот релоаде кода и при этом имеют незакрытые баги.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784473
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, а где в логе информация о том, что контекст уничтожен? Что за лог? Откуда он?
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784474
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чтобы всем проще жить, всегда можно набросать проект на гитхабе и предоставить всем ссылку:

https://github.com/cudu/predestroy-working-example

вот тут все работает.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784529
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинА чтобы всем проще жить, всегда можно набросать проект на гитхабе и предоставить всем ссылку:

https://github.com/cudu/predestroy-working-example

вот тут все работает.
Спасибо за пример, но есть момент:
Запускаю работает, добавляю код в метод openSession(), например sout, сохраняюсь, запускаю снова, ошибка:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Exception in thread "main" java.lang.NoClassDefFoundError: org/sql/ru/predestroy/SmppSession
	at org.sql.ru.predestroy.Sendersoap02Application.main(Sendersoap02Application.java:12)
Caused by: java.lang.ClassNotFoundException: org.sql.ru.predestroy.SmppSession
	at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 1 more


После этого делаю Clean and Build, потом запускаю, всё работает.

Почему так?
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784536
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, потому что вы не знаете, что нажимаете или не знаете, что за скрипты стоят за кнопками в той среде, где нажимаете. То, что вы нажимаете, должны изучить.
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784551
Molasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинА чтобы всем проще жить, всегда можно набросать проект на гитхабе и предоставить всем ссылку:

https://github.com/cudu/predestroy-working-example

вот тут все работает.
Разницу нашёл только в использовании @Component вместо класса с конфигурированием бинов AppConfig
...
Рейтинг: 0 / 0
Spring: уничтожение бина
    #39784561
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Molasar, а мне сравнить сложно с вашим проектом..ибо я его в глаза не видел.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring: уничтожение бина
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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