Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
 Аннотации спринга, по-моему перебор, не? :)  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1995
Я тут код смотрю чужой и вижу такое, а так как всё еще не прочитал книгу или много доков по спрингу не особо уверен, что такое кол-во аннотаций есть гуд:

@Configuration
public class ...

@Autowired
    private ...

 @Bean
    public ...

 @Bean
 @PostConstruct
    public ...


Особенно смущает последняя комбинация :)
Имеет право на жизнь такой код или аннотации перекрывают друг друга?
14 май 20, 00:31    [22132515]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5289
Nixic
Я тут код смотрю чужой и вижу такое, а так как всё еще не прочитал книгу или много доков по спрингу не особо уверен, что такое кол-во аннотаций есть гуд:

@Configuration
public class ...

@Autowired
    private ...

 @Bean
    public ...

 @Bean
 @PostConstruct
    public ...


Особенно смущает последняя комбинация :)
Имеет право на жизнь такой код или аннотации перекрывают друг друга?


Ну "@Configuration" это грязный класс.
Надо стараться чтобы в нем сосредотачивалась всякая дичь.

Как минимум это лучше, чем писать портянки xml, для настройки Spring-контекста. :-)
14 май 20, 05:59    [22132561]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
Да тут вопрос больше наверное про сочетание:
 @Bean
 @PostConstruct 

выглядит реально как дичь

Это тоже странновато:
@Autowired
    private

В реальности наверное лучше просто в метод передать этот бин как параметр, а не инжектить во всю конфигурацию.
14 май 20, 18:06    [22133155]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5289
SpringMan
Да тут вопрос больше наверное про сочетание:
 @Bean
 @PostConstruct 

выглядит реально как дичь


Согласен с вами. Это странное аннотирование

SpringMan

Это тоже странновато:
@Autowired
    private

В реальности наверное лучше просто в метод передать этот бин как параметр, а не инжектить во всю конфигурацию.


Ну возможно, нужны бины в методе "@PostConstruct"
15 май 20, 05:21    [22133376]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
Nixic
Я тут код смотрю чужой и вижу такое
public class ...
метод1... 

метод2... 


Щас мы разберем все полтора миллиона вариантов аннотаций и скажем что метод2 тут явно лишний
)))
15 май 20, 06:04    [22133383]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1995
Хех, ну да вариантов много. В общем выложу код, переименую класс, чтоб не палиться :) Задача такая - не давать стартовать сервису, если не доступна БД.
Да, меня именно эта связка аннотаций смутила:
@Bean
@PostConstruct
а инжект Environment'а - фиг с ним :)

+ SomeConfig.java
@Configuration
@EnableTransactionManagement
@EnableCaching
public class SomeConfig {

    private static final Logger LOGGER = LoggerFactory.getLogger(SomeConfig.class);

    @Autowired
    private Environment env;

    @Bean
    @PostConstruct
    public void checkConnection() {
        try {
            HikariConfig config = new HikariConfig();
            config.setMaximumPoolSize(Integer.parseInt(env.getProperty("spring.datasource.hikari.maximum-pool-size")));
            config.setDriverClassName("org.postgresql.Driver");
            config.setJdbcUrl(env.getProperty("spring.datasource.url"));
            config.setUsername(env.getProperty("spring.datasource.username"));
            config.setPassword(env.getProperty("spring.datasource.password"));
            HikariDataSource hikariDataSource = new HikariDataSource(config);
            hikariDataSource.getConnection().getCatalog();
        } catch (Exception ex) {
            LOGGER.error("Не удалось подключиться к БД при старте");
            System.exit(1);
        }
    }
}
16 май 20, 11:19    [22134101]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1995
Я вообще думаю, что для решения задачи достаточно было в пропертях добавить
spring.datasource.continue-on-error=false
Что и было зделано дополнительно к этому коду.
Но чувак не мог отловить эту ошибку и записать её в лог, чтобы девопсы видели, что пошло не так.
Но вот эта связка... очень смущает.
Наверное есть лучше способ?
16 май 20, 11:24    [22134102]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
Для такого решения достаточно только @PostConstruct. По поводу spring.datasource.continue-on-error=false тут есть. Этот параметр значит: падать, если скрипт инициализации базы успешно не запустился - т.е. придется подложить какой-нить скрипт - тоже не самое красивое, что есть)
Вообще как я понял, у разработчиков этого добра философия такая, что приложение не должно падать, а должно пытаться подключаться до победного

Nixic
Но чувак не мог отловить эту ошибку и записать её в лог, чтобы девопсы видели, что пошло не так.

Вообще звучит как неправда

Сообщение было отредактировано: 16 май 20, 22:51
16 май 20, 22:52    [22134363]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
Nixic
Member

Откуда: Perm
Сообщений: 1995
SpringMan

Вообще как я понял, у разработчиков этого добра философия такая, что приложение не должно падать, а должно пытаться подключаться до победного

Да не, там же System.exit(1);
Приложение вообще без подключения к БД не долго стартовать, на счет того, что оно в рантайме потеряет БД тут оно хоть упадет, хоть нет - не важно, главное, что если упадет, то не принудительно.
17 май 20, 01:53    [22134403]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
dakeiras
Member

Откуда:
Сообщений: 445
SpringMan
Для такого решения достаточно только @PostConstruct. По поводу spring.datasource.continue-on-error=false тут есть. Этот параметр значит: падать, если скрипт инициализации базы успешно не запустился - т.е. придется подложить какой-нить скрипт - тоже не самое красивое, что есть)
Вообще как я понял, у разработчиков этого добра философия такая, что приложение не должно падать, а должно пытаться подключаться до победного

Nixic
Но чувак не мог отловить эту ошибку и записать её в лог, чтобы девопсы видели, что пошло не так.

Вообще звучит как неправда

Вы про подключение к базе? Не, такое не поддерживается в Спринге сейчас.

Вот ссылка на обсуждение и на мой коммент (ник apriamostanov): https://github.com/spring-projects/spring-boot/issues/4779#issuecomment-501242970

Он не просто не стартует если базы нет, но и падает если например базу перезагрузили.

Идея в том чтобы отлавливать восстановимые ошибки при коннекте к базе и ждать их восстановления.

Сейчас это не поддерживается в Спринге

Сообщение было отредактировано: 17 май 20, 03:59
17 май 20, 04:00    [22134409]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
Я фигею.
Спринг уже аннотациями базу захватил?
Тут есть хоть один у кого рабочий проект с этим делом?
17 май 20, 10:44    [22134441]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
Ржавый гвоздь
Member

Откуда:
Сообщений: 80
Потому что спринг пора закопать. Иначе рискуете, что ваш проект начнет жить своей жизнью, независимо от вас, и ничего хорошего из этого разумеется не выйдет. Думать надо, и архитектуру разрабатывать головой, а не спрингом.
17 май 20, 10:51    [22134444]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
Nixic
SpringMan

Вообще как я понял, у разработчиков этого добра философия такая, что приложение не должно падать, а должно пытаться подключаться до победного

Да не, там же System.exit(1);
Приложение вообще без подключения к БД не долго стартовать, на счет того, что оно в рантайме потеряет БД тут оно хоть упадет, хоть нет - не важно, главное, что если упадет, то не принудительно.

Не так выразился. Философия у сприговцев, не у создателя приложения

dakeiras

Он не просто не стартует если базы нет, но и падает если например базу перезагрузили.

Специально сейчас проверил: приложение нормально стартует, если нет базы. У ТС-а уже противоположная проблема
17 май 20, 11:01    [22134447]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
PetroNotC Sharp
Я фигею.
Спринг уже аннотациями базу захватил?
Тут есть хоть один у кого рабочий проект с этим делом?

Ну там возможность только запустить sql скрипт при старте приложения или flayway/liquidbase скрипты - магии особой нет
17 май 20, 11:12    [22134450]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
SpringMan
PetroNotC Sharp
Я фигею.
Спринг уже аннотациями базу захватил?
Тут есть хоть один у кого рабочий проект с этим делом?

Ну там возможность только запустить sql скрипт при старте приложения или flayway/liquidbase скрипты - магии особой нет

Не понял архитектуру и замысел.
Если так как ты написал, тогда это походит на выполнение скрипта из html.
17 май 20, 11:22    [22134452]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
>или flayway/liquidbase скрипты
= спринг знает про эти либы? Есть include какие то что ли о данных форматах?
17 май 20, 11:24    [22134454]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
PetroNotC Sharp
>или flayway/liquidbase скрипты
= спринг знает про эти либы? Есть include какие то что ли о данных форматах?

Ужос....
Почитал. Спринг и туда добрался.
Круто))
17 май 20, 11:27    [22134455]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
По сабжу - аннотации спринга = перебор.
Прогеру трудно выбирать, где они нужны и где не нужны.
Так как аннотирование превратилось в программирование.
17 май 20, 11:29    [22134456]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
PetroNotC Sharp

Не понял архитектуру и замысел.
Если так как ты написал, тогда это походит на выполнение скрипта из html.

По сути да. Такой же подход (создание базы из приложения) есть в hibernate, groovy on grails, ruby on rails и т.п. Это всего лишь возможность для особых случаев, никто не обязует так делать всегда

Сообщение было отредактировано: 17 май 20, 11:34
17 май 20, 11:35    [22134457]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
SpringMan,
Ну, могу сказать про хибер. Эта фича у него естественна.
Вот и получается что спринг нагло влез на территорию хибера.
Ну а Ruby вроде к java не имеет отношения.
17 май 20, 11:39    [22134458]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
PetroNotC Sharp,

Тут имхо не важно хибер/руби или что там еще. Главное выбрать подход: создавать базу во время старта приложения или накатывать скрипты отдельно. Лично мне вообще не спокойно, если хиберу давать делать какие-то ddl операции. Кто знает, что он там начнет делать в случае обновления версий и т.п. - sql скрипты прозрачнее

Сообщение было отредактировано: 17 май 20, 11:48
17 май 20, 11:46    [22134466]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
SpringMan,
ЗАДАЧА: Создать БД (тестовая?) во время старта ВЕБ ПРИЛОЖЕНИЯ (сервиса?)
......
Тут столько вопросов сразу возникает по уточнению ТЗ.
Что невольно спрашиваешь, нахрена тут спринг лезет вообще со своей аннотацией?
17 май 20, 12:01    [22134470]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
SpringMan
Member

Откуда:
Сообщений: 166
PetroNotC Sharp,

Для создания базы при старте приложения вообще не надо никаких аннотаций, это решается на уровне конфигураций. Создание базы и аннотации ТС-а это не связанные проблемы (ТС захотел просто использовать spring.datasource.continue-on-error = false, а это не совсем о его проблеме)
17 май 20, 12:37    [22134484]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
mayton
Member

Откуда: loopback
Сообщений: 46531
Nixic

Особенно смущает последняя комбинация :)
Имеет право на жизнь такой код или аннотации перекрывают друг друга?

Поскольку декларативная наука "программирование на аннотациях" еще не сформировалась,
как отдельная отрасль - нам придется решать вопросы приоритета процессинга аннотаций
особенно если процессоров более чем один. Я думаю что это выльеться как минимум еще
в один язык программирования или мета-язык. И где-то на последних этапах переосмысления
мы придем вопросу принципиальной невозможности решать эти проблемы на мета-языке
и нам потребуется не мета-язык а ПОЛНОЦЕННЫЙ язык пре-процессинга наподобие языка
разработки. Или создадим язык-в-языке.
17 май 20, 12:53    [22134492]     Ответить | Цитировать Сообщить модератору
 Re: Аннотации спринга, по-моему перебор, не? :)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4839
SpringMan,
Аннотация это конфигурирование на сегодняшний день.
Или декларативное программирование.
Поэтому фраза: "не надо аннотаций но надо конфигурации"
вообще запутывает честного программиста.
А я говорил еще шире - какого рожна спринг лезет в базу. Хоть и скриптами?
17 май 20, 13:25    [22134505]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4 5 6   вперед  Ctrl      все
Все форумы / Java Ответить