предисловие
Из-за бизнес-требований два набора источников данных (соединяющих две базы данных) должны быть настроены в SpringBoot одновременно, и требуется, чтобы сервисный уровень мог автоматически переключать источник данных при вызове преобразователя каждой таблицы базы данных, что то есть картограф автоматически обращается к правильной базе данных.
Содержание этой статьи:
- На основе проекта Springboot+Mybatis изучите быструю настройку нескольких источников данных.
- Избегайте ям некоторых статей по настройке источников данных в Интернете.
Обзор практического руководства по SpringBoot:
[Springboot] SpringCache + Redis реализует кеширование данных
[Springboot] Отправка писем и сброс паролей
текст
Конфигурация с несколькими источниками данных (интеграция MyBatis)
Версия SpringBoot: 2.0.6.RELEASE
Схема структуры проекта (простите меня за защиту кода конфиденциальности):
Исключить класс автоматической конфигурации SpringBoot DataSourceAutoConfiguration.
Во-первых, исключите этот класс из @SpringBootApplication, поскольку он будет читать свойства spring.datasource.* файла application.properties и автоматически настраивать единственный источник данных.
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class
})
Настройте информацию о подключении к нескольким источникам данных в application.properties.
Сколько источников базы данных вам нужно подключить, просто настройте несколько, имена могут быть свободно названы вместо db1, db2
# database
db.conn.str = useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useLocalSessionState=true&tinyInt1isBit=false
spring.datasource.db1.jdbc-url=jdbc:mysql://xxxx1:xxxx/xxxxx1?${db.conn.str}
spring.datasource.db1.username=xxxxx
spring.datasource.db1.password=xxxxx
spring.datasource.db1.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.db2.jdbc-url=jdbc:mysql://xxxxx2:xxxx/xxxxx2?${db.conn.str}
spring.datasource.db2.username=xxxxx
spring.datasource.db2.password=xxxxx
spring.datasource.db2.driver-class-name=com.mysql.jdbc.Driver
Примечание. Обязательно измените spring.datasource.db1.url на spring.datasource.db1.jdbc-url.
Объяснение из официальной документации: поскольку фактический тип пула соединений не раскрывается, ключ не создается в метаданных вашего пользовательского источника данных и не выполняется в среде IDE (поскольку интерфейс DataSource не предоставляет свойства ). Кроме того, если у вас есть Hikari в пути к классам, эта базовая настройка не будет работать, поскольку у Hikari нет свойства url (но есть свойство jdbcUrl). В этом случае вы должны переписать свою конфигурацию следующим образом:
Вручную создавать классы конфигурации базы данных
Поскольку мы отключили автоматическую настройку источников данных, нам нужно вручную создать эти источники данных на следующем шаге и создать класс DataSourceConfig.
@Configuration
public class DataSourceConfig {
@Bean(name = "db1")
@ConfigurationProperties(prefix = "spring.datasource.db1")
public DataSource businessDbDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "db2")
@ConfigurationProperties(prefix = "spring.datasource.db2")
public DataSource newhomeDbDataSource() {
return DataSourceBuilder.create().build();
}
}
Настройте SqlSessionFactory mybatis для разных источников данных соответственно.
Это позволяет нашим картографам под разными именами пакетов автоматически использовать разные источники данных.
Создайте Db1Config:
/**
* @author yangzhendong01
*/
@Configuration
@MapperScan(basePackages = {"com.xxxxx.webApi.mapper.db1"}, sqlSessionFactoryRef = "sqlSessionFactoryDb1")
public class Db1Config {
@Autowired
@Qualifier("db1")
private DataSource dataSourceDb1;
@Bean
public SqlSessionFactory sqlSessionFactoryDb1() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSourceDb1);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml"));
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplateDb1() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryDb1());
}
}
Создайте Db2Config:
/**
* @author yangzhendong01
*/
@Configuration
@MapperScan(basePackages = {"com.xxxxx.webApi.mapper.db2"}, sqlSessionFactoryRef = "sqlSessionFactoryDb2")
public class Db2Config {
@Autowired
@Qualifier("db2")
private DataSource dataSourceDb2;
@Bean
public SqlSessionFactory sqlSessionFactoryDb2() throws Exception {
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSourceDb2);
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db2/*.xml"));
return factoryBean.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplateDb2() throws Exception {
return new SqlSessionTemplate(sqlSessionFactoryDb2());
}
}
Примечание. На этом шаге необходимо добавить путь сканирования файла mapper.xml, в противном случае будет сообщено об ошибке Неверный связанный оператор (не найден)
factoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/xxxxxx/*.xml"));
После выполнения этих конфигураций допустим у нас есть 2 маппера mapper.db1.xxxMapper и mapper.db2.xxxMapper, когда мы используем первый в любом месте программы, будет автоматически подключаться библиотека db1, а последний будет подключаться к библиотеке db2 .
использованная литература
Основная ссылка:
Другие ссылки:
блог Brother space.com/spring boot…
Суммировать
Эта статья основана на проекте Springboot+Mybatis, посвященном быстрой настройке нескольких источников данных.
Поздравляю всех с праздником Дня Республики!
Подписывайтесь на меня
В настоящее время я backend-разработчик. Основное внимание уделяется back-end разработке, безопасности данных, граничным вычислениям и другим направлениям.
WeChat: yangzd1102 (укажите цель)
Гитхаб:@qqxx6661
личный блог:
- CSDN:@Rude3Knife
- Знаю почти:@Zhendong
- Краткая книга:@Многие три ножа и ножи
- Самородки:@Многие три ножа и ножи
Оригинальное основное содержание блога
- Полное руководство по обзору знаний Java
- Анализ вопросов алгоритма Leetcode
- Меч относится к анализу проблемы алгоритма предложения.
- Боевая серия для новичков SpringCloud
- Боевая серия для новичков SpringBoot
- Технические статьи о краулерах
- Технические статьи, связанные с бэкенд-разработкой
Личный публичный аккаунт: разговор о технологиях back-end
Если статья оказалась для вас полезной, вы можете забрать ее и отправить своим друзьям~