|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
есть класс JdbcRepository: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
который работает для одного источника данных в среде spring-boot. Нужно расширить его применение для нескольких источников данных, для нескольких значений параметра NamedParameterJdbcTemplate jdbc. В конфигураторе создаются beans для каждого источника данных, как напр., для источника postgres: Код: java 1. 2. 3. 4.
и далее начинаются непонятки. Для манипулирования данными разных источников используются классы DataAccessService[xx], напр., для источника postgres: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
я не понимаю, как правильно внедрить bean(name = "sourcePg"). строка конструктора Код: java 1.
очевидно, не правильная. Как правильно внедрить bean(name = "anySource") в класс DataAccessService[anySource] ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 09:27 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
1. Твой бин не должен быть prototype, это обычный singleton. Ты ж не хочешь чтоб создавалось много одинаковых объектов JdbcRepository (с одинаковыми параметрами). 2. Ну и объяви несколько @Bean в контексте которые возвращают все тот же JdbcRepository: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
И то же самое прийдется сделать с сервисами и пр. По сути ты создаешь как бы два приложения внутри одного. Но архитектура конечно странноватая, я с трудом себе представляю требования.. Если расскажешь подробней зачем это все и как это будет использоваться, может тебе подскажут вариант по-удобней. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 09:51 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron Как правильно внедрить а это ты для дяди пишешь? @Bean (name = "sourcePg") бин с конкретным именем можно инжектировать либо неявно, указав его как имя параметра/поля, т.е. вместо NamedParameterJdbcTemplate jdbcPg -> NamedParameterJdbcTemplate sourcePg либо явно с помощью аннотации Qualifier ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 09:51 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron, Какой смысл жонглировать базами в одном сервисе? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 09:57 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, прошу прощения, имя бина я указал просто для передачи смысла, в тексте .java этого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:00 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, я так и сделал: в конфигураторе объявил неск. бинов для разных источников. и то же самое делаю для сервисов. я тщательно не пробовал проект, т.к. пока занят простым редактированием, и строка Код: java 1.
мне не понравилась. вот и вопрос такой: так - можно ? и @Scope("prototype") должен быть именно такой. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:10 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, так ведь не всегда мы властны над судьбой. но здесь для каждой БД - свой класс-сервис. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:13 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron , с такой формулировкой тебе не помогут или помогут неправильно. Либо ты расскажешь что и зачем, либо будешь продолжать есть кактус. Это ты еще до управления транзакциями не дошел.. chronи @Scope("prototype") должен быть именно такой.Ну раз ты познал все таинства, то ты и на другие вопросы наверно сам знаешь ответы :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:18 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron, Заставляют? Это плохо. А как тогда пишите sping.datasource.url.......driver? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:19 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
Stanislav Bashkyrtsev, да, с транзакциями всё впереди. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:43 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, короче, я понял: нужно довести проект до формирования конкретной ошибки и тогда разсуждать. возможно, я поторопился с вопросом. пусть пока так будет. Вот здесь уже Stanislav Bashkyrtsev предвидит шикарный трах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:46 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron, Ну дак Hello world же. Сначала нужно сделать демку как все делают. А потом уже фантазии из сна постановщика или программиста. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 10:48 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
не инициализируется bean одного из источников данных. структура проекта прилагается. конфигураторы написаны для каждого источника данных, для pg и h2. для БД H2 класс DataSourcesConfigurationH2: Код: 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.
для БД postgres класс DataSourcesConfigurationPg: Код: 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.
класс JdbcRepository подключается из локальной библиотеки .m2 строка в начале листинга закомментирована Код: java 1.
потому, что класс находится без этого указателя. -------- класс манипулирования данными DataAccessServicePg: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
контроллер BaseController, который вызывает метод Actor actorOne: Код: 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.
остальное — стандартно. вызываю метод контроллера @GetMapping("/dataPg") и получаю сообщение: Код: html 1. 2.
из которого ясно, что вызывается метод сервиса H2, а не pg. Функция actorlist есть в БД pg, и её нет в БД H2. Другими словами, не выполнился код инициализации в конфигураторе DataSourcesConfigurationPg. Кто знает, куда нужно посмотреть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 18:59 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
поставь брейпоинты в Pg-конфигурации и посмотри что туда реально прилетает при создании бинов, возможно ты что-то с пропертями намутил и туда приходит не то, что ты думаешь. Так сложно на глаз косяк заметить, вроде бы (вроде бы) все норм ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 21:36 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, вот с каким application.properties всё запускается: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
в pg-конфигурации пробовал так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
но тоже не помогло. Конечно, дело в этом классе - конфигураторе БД pg. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 21:56 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
установлено: не включается инициализатор initializeDataSourceBuilder() для бина Код: java 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2021, 22:20 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron установлено: не включается инициализатор initializeDataSourceBuilder() для бина откуда вообще префикс "app.datasource.pg.configuration" - у тебя в пропертях такого нет, есть "app.datasource.h2" и "app.datasource.pg". и зачем он вообще над методом, если бин DataSourceProperties создается отдельно строчкой выше? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 09:59 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, да, это лишнее. я оставил: -- в классе DataSourcesConfigurationH2 Код: java 1. 2. 3. 4. 5. 6.
-- и в классе DataSourcesConfigurationPg Код: java 1. 2. 3. 4. 5.
но в обоих классах значение HikariDataSource datasource.getDriverClassName() после инициализации равно "org.h2.Driver". ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 10:26 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
нужно значит дебажить что происходит в методе dataSourcePg - какие DataSourceProperties туда реально попадают и почему. Магия спринга нах. Я если честно, ни видал такого способа конфигурации через DataSourceProperties, по идее (по идее) должно работать и так Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 12:07 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, всё предельно просто, но не работает: application.properties Код: html 1. 2. 3. 4. 5. 6. 7.
config h2 Код: 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.
config pg Код: java 1. 2. 3. 4. 5. 6.
не инициализируется dataSourcePg ну, никак. без дебаггера ясно, что spring`у нужно что-то подсказать. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 14:38 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron, Сворачивайся и делай как все. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 15:24 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, как это - как все ? я не могу получить ответ на простой вопрос: как инициализировать в spring два источника данных. Даже в документации об этом есть http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-two-datasources . Значит - есть в этом потребность. Но указанный в доках код не работает и никто не знает ответа - почему. Я считал, что spring при его популярности, такие вопросы уже закрыл. В данном случае выполняется "ручная инициализация", которая полностью в доках не описана, отсюда и непонятки. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 16:19 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron, Смотри первый пост. Жонглировать коннектами бд в одном приложении глупость. Сделай микросервисы. Или jdbc. Но спринг и jpa и ОРМ и хибер не заточен на это. Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 16:29 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron Значит - есть в этом потребность. Прогеры часто выдумывают себе самому работу. Бывает. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 16:31 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, да, про микро я уже думал. побарахтаюсь ещё немного и буду всё переделывать. chpasha спрашивал, откуда взялось использование Код: java 1. 2. 3. 4. 5.
вот отсюда взялось https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.data-access.configure-two-datasources . ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 16:33 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
небольшое дополнение. если назначить нужные свойства напрямую в бинах классах конфигурации, как показано для БД postgres, то всё работает Код: java 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 18:23 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
я х.з. что у тебя там не так, специально потратил время на создание пустого проекта с двумя datasource. все нах работает как надо, ковыряй свою консерваторию или выкладывай исходники Код: json 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: 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.
показываю скриншоты дебага адын ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 21:44 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
два ... |
|||
:
Нравится:
Не нравится:
|
|||
14.09.2021, 21:44 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, я твой должник. но. 1. нужно добавить @Primary для @Bean public JdbcTemplate jdbcTemplate1() 2. используемый класс класс просит NamedParameterJdbcTemplate а не JdbcTemplate у меня код всё равно не работает. и причина в том, что DataSourceBuilder.create().build(); не отображает свойства @ConfigurationProperties(prefix = "app.datasource.pg") я посмотрел на stackoverflow.com, там народ использует JPA и всё работает. а я только JDBC DATA. может не хватает каких н.б. библиотек. спасибо тебе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 09:34 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, мне нужно время, у тебя в project java-16, а у меня - 11. если причина в этом - ура. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 09:49 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, твой проект работает, мой нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 11:01 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron твой проект работает, мой нет. то бишь Код: java 1. 2. 3. 4. 5.
вместо Код: java 1. 2. 3. 4. 5.
chron 1. нужно добавить @Primary для @Bean public JdbcTemplate jdbcTemplate1() 2. используемый класс класс просит NamedParameterJdbcTemplate а не JdbcTemplate chron я посмотрел на stackoverflow.com, там народ использует JPA и всё работает. а я только JDBC DATA. может не хватает каких н.б. библиотек. chron chpasha, мне нужно время, у тебя в project java-16, а у меня - 11. если причина в этом - ура. скорее всего нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 11:10 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha а ты пробовал делать инъекцию, как у меня? не через параметр метода, а через вызов метода бина? Может с этим какой-то ньюанс? точно - в этом проблема. поменял в моем проекте и тоже инжектит один ds в оба метода (инжектит тот, что Primary). Либо меняй на инъекцию через вызов метода, либо ставь явно @Qualifier("dataSourceX") перед параметром - так тоже работает. Интересно, это баг или фича, что внутри конфигурации не инжектит по имени параметра - я бы сказал, что баг, но поскольку рекомендованный метод инъекции через явный вызов метода внутри одного конфига, то может и фича ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 11:23 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, сделал, как у тебя Код: java 1. 2. 3. 4. 5. 6. 7.
, даже перешел на application.yml вместо application.properties, но не помогло. здесь не выполняется начальная инициализация, при чтении конфигурационного файла: Код: java 1. 2. 3. 4. 5. 6.
в методе .build(); ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 14:02 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
выложи минимально воспроизводимый пример - выкинь все ненужное, оставь только этот конфиг и если не работает, выкладывай ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 14:10 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
на счет инъекции по имени прояснилось - оказывается, если существует несколько бинов одного типа, то инъекция по имени это fallback для случая, когда нет @Primary, если @Primary есть, то инжектится он, а имя параметров игнорируется. Так что лучше либо явно бин-методы вызывать, либо использовать Qualifier ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 14:42 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chpasha, с твоей помощью - победа. вот как работает у меня: привожу пример только 2-й БД Код: 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.
и инжектить bean jdbcRepositoryPg нужно не так: Код: java 1. 2. 3. 4. 5.
а так: Код: java 1. 2. 3.
... пошёл изучать твою ссылочку "на счет инъекции". без тебя - ничего бы не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 15:26 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
chron пошёл изучать твою ссылочку "на счет инъекции". это не "ссылочка", я просто запостил типа багрепорт на гитхабе спринга, они мне сказали, что это не баг и объяснили почему ... |
|||
:
Нравится:
Не нравится:
|
|||
15.09.2021, 16:33 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
автор столкнулся с проблемой ,которая задается на любом тех интервью- как обозначить две имплементации одного интерфейса я предпочитаю спринг нейминг- но вообще для общего понимания лучше @Qualifier(name =a) причем нужно понимать что @Qualifier может использоваться как для обьявления ,так и для внедрения- тоесть @Primary по сути не нужен ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2021, 20:54 |
|
как правильно внедрить bean в компонент spring-boot.
|
|||
---|---|---|---|
#18+
O_79_O, здорово, всё работает: конфигурация: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
и класс-Service: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
мне с самого начала конструкция @Primary казалась легкомысленной. Логика: если есть @Primary, значит есть альтернатива, и нужно правильно настроить возможные коллизии, а не отдавать всё @Primary. а вообще, развитие spring напоминает ризому. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.09.2021, 13:20 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120343]: |
0ms |
get settings: |
16ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
35ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
624ms |
get tp. blocked users: |
1ms |
others: | 376ms |
total: | 1066ms |
0 / 0 |