Size: a a a

Spring Framework and more

2020 June 11

RS

Ruslan Stelmachenko in Spring Framework and more
Aleksander Lemyagov
Так а разве в конфигурации не надо делать @Profile, если эта конфигурация только с профилем активна? Может я не то понял
Смотря какая цель. Если нужно создать или не создавать бин в зависимости от флага, то можно сделать, как описал @vdsirotkin . Если же от значения флага не зависит наличие или отсутствие какого-то бина, а это флаг-настройка самого поведения бина, тогда этот флаг просто биндится на @ConfigurationProperties и потом либо класс @ConfigurationProperties целиком инжектится в бин, либо, если этот класс не тесно связан с бином и не является исключительно его настройками (а допустим содержит разнородные настройки разных бинов), то из него геттером извлекается занчение флага и передается в конструктор бина явным образом (в методе создания этого бина в классе @Configuration).
источник

VS

Vitaly Sirotkin in Spring Framework and more
итоговая мысль в том, что в подавляющем большинстве случаем удобнее и логичнее управлять поведением приложения отталкиваясь от конкретных параметров настройки, а не от названия профиля спринга. я б порекомендовал изучить возможности @Conditional* аннотаций, это очень мощный инструмент для динамической конфигурации
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Так и тестировать проще. В тесте при создании бина передается именно конфигурация этого бина, с которой ты хочешь проверить его работу, а не название профайла. Профайл вообще в тестах обычно другой.
источник

VS

Vitaly Sirotkin in Spring Framework and more
вот так вопрос про spel превратился в часовые архитектурные дебаты 🙂
источник

RS

Ruslan Stelmachenko in Spring Framework and more
Aleksander Lemyagov
Конструктор.
Специально проверел только что на свежесгенерированном на start.spring.io проекте, и если депенденси не находит, то при запуске падает, а не просто поле становится null.

2020-06-11 02:05:09.670 ERROR 21048 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.example.demo.MyBean required a bean of type 'com.example.demo.MyDependency' that could not be found.


Action:

Consider defining a bean of type 'com.example.demo.MyDependency' in your configuration.


Если же я делаю MyDependency бином, тогда запускается.

Инжект тоже через конструктор.

@Component
public class MyBean {

   private final MyDependency myDependency;

   public MyBean(MyDependency myDependency) {
       this.myDependency = myDependency;
   }
}


Интересно, как вы добились того, что у вас не так. Какой версии спринг-бут?

У меня получилось, только если в конструкторе явно указать

    public MyBean(@Autowired(required = false) MyDependency myDependency) {
       this.myDependency = myDependency;
   }
источник

AK

Anton Krasnov in Spring Framework and more
Подскажите а как можно прикрутить пагинацию к такому запросу в JPA и можноли это сделать?
   @Query("SELECT ap " +
           "FROM Apartments ap " +
           "WHERE ap.building.id =:buildingId " +
           "AND ap.rentStatus.id =:rentStatusId " +
           "AND ap.rentPrice BETWEEN :costFrom AND :costTo " +
           "AND ap.area BETWEEN :areaFom AND :areaTo " +
           "AND ap.roomCount IN :rooms " +
           "AND ap.entrance IN :entrance " +
           "AND ap.floor IN :floor")
   List<Apartments> findAllByFilter(@Param("buildingId") Long buildingId,
                                    @Param("rentStatusId") Long rentStatusId,
                                    @Param("costFrom") Integer costFrom,
                                    @Param("costTo") Integer costTo,
                                    @Param("areaFom") Float areaFom,
                                    @Param("areaTo") Float areaTo,
                                    @Param("rooms") Iterable<Integer> rooms,
                                    @Param("entrance") Iterable<Integer> entrance,
                                    @Param("floor") Iterable<Integer> floor);
источник

AE

Alexandr Emelyanov in Spring Framework and more
Anton Krasnov
Подскажите а как можно прикрутить пагинацию к такому запросу в JPA и можноли это сделать?
   @Query("SELECT ap " +
           "FROM Apartments ap " +
           "WHERE ap.building.id =:buildingId " +
           "AND ap.rentStatus.id =:rentStatusId " +
           "AND ap.rentPrice BETWEEN :costFrom AND :costTo " +
           "AND ap.area BETWEEN :areaFom AND :areaTo " +
           "AND ap.roomCount IN :rooms " +
           "AND ap.entrance IN :entrance " +
           "AND ap.floor IN :floor")
   List<Apartments> findAllByFilter(@Param("buildingId") Long buildingId,
                                    @Param("rentStatusId") Long rentStatusId,
                                    @Param("costFrom") Integer costFrom,
                                    @Param("costTo") Integer costTo,
                                    @Param("areaFom") Float areaFom,
                                    @Param("areaTo") Float areaTo,
                                    @Param("rooms") Iterable<Integer> rooms,
                                    @Param("entrance") Iterable<Integer> entrance,
                                    @Param("floor") Iterable<Integer> floor);
передать в метод объект Pageable
источник

Д

Дмитрий in Spring Framework and more
Собственно про флаг все ответили, добавлю от себя, что @ConditionalOnProperty и на её основе мокирование бинов может съэкономит много времени и нервов, все внешние зависимости желательно иметь возможность подменить
источник

AK

Anton Krasnov in Spring Framework and more
Alexandr Emelyanov
передать в метод объект Pageable
спасибо, так все просто оказалось
источник

AL

Aleksander Lemyagov in Spring Framework and more
Vitaly Sirotkin
а чтобы иметь fallback имплементацию твоего сервиса я уже предлагал пользоваться @ConditionalOnMissingBean
Ну хорошо. Сделал я конфигурацию. вынес туда @ConditionalOnMissingBean, в самом бине завязался на проперти. Но теперь вопрос. У меня зависит логика от этого бина, который в свою очередь зависит от свойства, а наличие свойства зависит от профиля. Это ок все. Штука в том что если прокси бина нет, то мне надо делать все запросы без прокси, но вот как тогда проверять есть ли прокси, если я даю все равно бин. Может подскажете. а то я не понял.
источник

VS

Vitaly Sirotkin in Spring Framework and more
Aleksander Lemyagov
Ну хорошо. Сделал я конфигурацию. вынес туда @ConditionalOnMissingBean, в самом бине завязался на проперти. Но теперь вопрос. У меня зависит логика от этого бина, который в свою очередь зависит от свойства, а наличие свойства зависит от профиля. Это ок все. Штука в том что если прокси бина нет, то мне надо делать все запросы без прокси, но вот как тогда проверять есть ли прокси, если я даю все равно бин. Может подскажете. а то я не понял.
заинжекти свою проперти новую в сервис где тебе нужна проверка
источник

AL

Aleksander Lemyagov in Spring Framework and more
Vitaly Sirotkin
заинжекти свою проперти новую в сервис где тебе нужна проверка
тогда получается не нужна конфигурация и @ConditionalOnMissingBean?
источник

VS

Vitaly Sirotkin in Spring Framework and more
она нужна была бы если бы у тебя падало если не нашло бин. но если не падает - то может быть и не надо...
источник

AL

Aleksander Lemyagov in Spring Framework and more
Vitaly Sirotkin
она нужна была бы если бы у тебя падало если не нашло бин. но если не падает - то может быть и не надо...
падает. я проверил.
источник

AL

Aleksander Lemyagov in Spring Framework and more
это я ступил
источник

VS

Vitaly Sirotkin in Spring Framework and more
ну если ты не планируешь пользоваться mock implementation - то можно и не приседать с бинами
источник

VS

Vitaly Sirotkin in Spring Framework and more
хотя если твой сервис прокси требует какие то допнастройки которых не будет при выключенной проперте - то у тебя на стартапе упадет если не нашел проперти
источник

Д

Дмитрий in Spring Framework and more
Aleksander Lemyagov
Ну хорошо. Сделал я конфигурацию. вынес туда @ConditionalOnMissingBean, в самом бине завязался на проперти. Но теперь вопрос. У меня зависит логика от этого бина, который в свою очередь зависит от свойства, а наличие свойства зависит от профиля. Это ок все. Штука в том что если прокси бина нет, то мне надо делать все запросы без прокси, но вот как тогда проверять есть ли прокси, если я даю все равно бин. Может подскажете. а то я не понял.
Не понял задачу, слишком много огорода вокруг единственного флага
источник

AL

Aleksander Lemyagov in Spring Framework and more
Дмитрий
Не понял задачу, слишком много огорода вокруг единственного флага
уже все решено
источник

Ю

Юрий in Spring Framework and more
- id: auth_ashx
 uri: http://elg.clan.su/forum
 predicates:
   - Path=/news/**



Подскажите как сделать так, чтобы гетвей перенаправлял на http://elg.clan.su/forum/news? Потому что сейчас проксируется так: http://elg.clan.su/news
источник