При разработке любого приложения довольно часто приходится обращаться к нескольким базам данных. Из коробки 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”