Как я могу настроить и использовать два источника данных?
Например вот что у меня есть для первого источника данных:
application.properties
#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
#second db ...
Класс приложения
@SpringBootApplication
public class SampleApplication
{
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
Как я могу изменить, application.properties
чтобы добавить другой источник данных? Как мне автоматически подключить его для использования в другом хранилище?
java
spring
spring-boot
spring-mvc
datasource
Juventus
источник
источник
Обновление 2018-01-07 с Spring Boot 1.5.8. ВЫПУСК
Большинство ответов не предоставляют, как их использовать (как сам источник данных и как транзакция), только как их настроить.
Вы можете увидеть работающий пример и некоторые пояснения в https://www.surasint.com/spring-boot-with-multiple-databases-example/.
Я скопировал некоторый код здесь.
Сначала вы должны установить application.properties, как это
Затем определите их как поставщиков (@Bean) следующим образом:
Обратите внимание, что у меня есть @Bean (name = "datasource1") и @Bean (name = "datasource2"), тогда вы можете использовать его, когда нам нужен источник данных как @Qualifier ("datasource1") и @Qualifier ("datasource2"), например
Если вы заботитесь о транзакции, вы должны определить DataSourceTransactionManager для них обоих, например так:
Тогда вы можете использовать его как
или
Этого должно быть достаточно. Смотрите пример и подробности в ссылке выше.
источник
Обратитесь к официальной документации
Создание более одного источника данных работает так же, как создание первого. Возможно, вы захотите пометить один из них как @Primary, если вы используете автоконфигурацию по умолчанию для JDBC или JPA (тогда она будет выбрана любыми инъекциями @Autowired).
источник
Мне также пришлось настроить подключение к 2 источникам данных из приложения Spring Boot, и это было нелегко - решение, упомянутое в документации по Spring Boot , не сработало. После долгих копаний в интернете я заставил это работать и основная идея была взята из этой статьи и множества других мест.
Следующее решение написано на Kotlin и работает с Spring Boot 2.1.3 и Hibernate Core 5.3.7 . Основная проблема заключалась в том, что было недостаточно просто настроить различные конфигурации DataSource , но также было необходимо настроить EntityManagerFactory и TransactionManager для обеих баз данных.
Вот конфигурация для первой (Первичной) базы данных:
И это конфиг для второй базы данных:
Свойства источников данных таковы:
Проблема со свойствами заключалась в том, что мне пришлось определять jdbc-url вместо url, потому что в противном случае у меня было исключение.
ps Также у вас могут быть разные схемы именования в ваших базах данных, что было для меня. Так как Hibernate 5 не поддерживает все предыдущие схемы именования, мне пришлось использовать решение из этого ответа - возможно, это также поможет кому-то.
источник
mapOf("hibernate.physical_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy", "hibernate.implicit_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy" )
Вот полное решение
Поскольку мы собираемся получить доступ к двум разным базам данных (db1, db2), нам необходимо настроить каждую конфигурацию источника данных отдельно, например:
Второй источник данных:
Здесь вы можете найти полный пример в моем блоге: Spring Boot с несколькими конфигурациями источника данных
источник
источник
Я использовал mybatis - технологический стек Springboot 2.0, решение:
Примечание: 1) @Primary -> @primary
2) ---. "Jdbc-url" в свойствах -> После перехода с Spring Boot 2.0: jdbcUrl требуется с driverClassName
источник
@ Первичная аннотация при использовании в отношении метода, подобного приведенному ниже, работает хорошо, если два источника данных находятся на одном и том же месте базы данных / сервере.
Если источники данных находятся на разных серверах, лучше использовать @Component вместе с аннотацией @Primary . Следующий фрагмент кода хорошо работает на двух разных источниках данных в разных местах
источник
Мое требование немного отличалось, но использовались два источника данных.
Я использовал два источника данных для одинаковых объектов JPA из одного пакета. Один для выполнения DDL при запуске сервера для создания / обновления таблиц, а другой - для DML во время выполнения.
Соединение DDL должно быть закрыто после выполнения операторов DDL, чтобы предотвратить дальнейшее использование привилегий суперпользователя в любом месте кода.
свойства
Классы конфигурации источника данных
// 1-й класс конфигурации для источника данных DDL
// 2-й класс конфигурации для источника данных DML
// Использование источников данных DDL в коде.
// Использование источника данных DML в коде.
источник