При разработке любого приложения довольно часто приходится обращаться к нескольким базам данных. Из коробки Spring Boot обеспечивает легкий доступ к одному источнику данных, в простейшем случае просто указав драйвер JDBC в пути к классу!
Доступ к нескольким базам данных, однако, по-прежнему прост с Spring Boot. В этой статье показано, как подключиться к двум различным источникам данных MySQL из приложения Spring Boot.
Чтобы продемонстрировать, как подключаться к различным базам данных, рассмотрим базу данных продуктов и базу данных клиентов со следующей упрощенной схемой и данными.
База данных Один – База данных продуктов
Схема
create table PRODUCT(id integer, name varchar(255));
Данные
insert into PRODUCT(id, name) values (1, 'XBox');
База данных Вторая – База данных клиентов
Схема
create table CUSTOMER(id integer, name varchar(255));
Данные
insert into CUSTOMER(id, name) values (1, 'Daphne Jefferson');
Чтобы получить доступ к базам данных, нам нужно объявить JdbcTemplate
для каждой базы данных. Весной шаблоны Jdbc создаются из Источника данных
, который имеет набор свойств подключения (URL, имя пользователя, пароль и т.д.)
@Configuration public class DataSourceConfig { Bean @Qualifier("customerDataSource") @Primary @ConfigurationProperties(prefix="customer.datasource") DataSource customerDataSource() { return DataSourceBuilder.create().build(); } @Bean @Qualifier("productDataSource") @ConfigurationProperties(prefix="product.datasource") DataSource productDataSource() { return DataSourceBuilder.create().build(); } @Bean @Qualifier("customerJdbcTemplate") JdbcTemplate customerJdbcTemplate(@Qualifier("customerDataSource")DataSource customerDataSource) { return new JdbcTemplate(customerDataSource); } @Bean @Qualifier("productJdbcTemplate") JdbcTemplate productJdbcTemplate(@Qualifier("productDataSource")DataSource productDataSource) { return new JdbcTemplate(productDataSource); } }
В приведенном выше коде мы видим, что был объявлен компонент @Configuration
, который определяет источник данных о клиентах
и Шаблон customerJdbcTemplate
. Каждый из этих компонентов помечен определителем @('клиент...').
чтобы идентифицировать их как относящиеся к базе данных клиентов.
Аналогично, приведенный выше код определяет источник данных продукта
и шаблон JdbcTemplate продукта
. Опять же, они помечены определителем @('продукт...')
чтобы идентифицировать их как относящиеся к базе данных продуктов.
Наконец, каждый компонент Источник данных
аннотируется аннотацией @ConfigurationProperties(префикс ="...источник данных")
. Это указывает Spring Boot, какие свойства в файле application.properties
следует использовать для подключения к каждой базе данных. Таким образом, файл application.properties
выглядит следующим образом:
product.datasource.url = jdbc:mysql://localhost:3306/dbOne product.datasource.username = user1 product.datasource.password = password product.datasource.driverClassName = com.mysql.jdbc.Driver customer.datasource.url = jdbc:mysql://localhost:3306/dbTwo customer.datasource.username = user2 customer.datasource.password = password customer.datasource.driverClassName = com.mysql.jdbc.Driver
Теперь, когда мы увидели, как создать Источник данных
и JdbcTemplate
, этот JdbcTemplate
может быть введен в @Репозиторий
для использования, например
@Repository public class CustomerRepository { private static final String SELECT_SQL = "select NAME from CUSTOMER where ID=?"; @Autowired @Qualifier("customerJdbcTemplate") JdbcTemplate customerJdbcTemplate; public String getCustomerName(int id) { String name = customerJdbcTemplate.queryForObject(SELECT_SQL, new Object[] {id}, String.class); return name; } }
Опять же, обратите внимание на использование @Квалификатор
аннотация, указывающая, какая JdbcTemplate
требуется для разных репозиториев.
Каталог ProductRepository
аналогично написан для доступа к product JdbcTemplate
@Repository public class ProductRepository { private static final String SELECT_SQL = "select NAME from PRODUCT where ID=?"; @Autowired @Qualifier("productJdbcTemplate") JdbcTemplate productJdbcTemplate; public String getProductName(int id) { String name = productJdbcTemplate.queryForObject(SELECT_SQL, new Object[] {id}, String.class); return name; } }
С помощью нескольких простых шагов Spring Boot позволяет нам легко подключаться к нескольким базам данных при использовании шаблонов Jdbc.
Кредиты
Фото Ян Антонин Колар вкл. Расплескать
Оригинал: “https://dev.to/davey/accessing-multiple-databases-from-a-spring-boot-application-1293”