Dirección de GitHub de demostración del proyecto
Este artículo es para los zapatos de los niños que han dominado mybatis para configurar una única base de datos . Para aquellos que no dominen mybatis para configurar una sola fuente de datos, pueden encontrar otros artículos para compensarlo
Se pueden realizar ambas pruebas.
Integrar mybatis
Consulte la configuración de múltiples fuentes de datos del blog
mybatis
- Crear [entidad], [clase de interfaz], [archivo de mapeador], [base de datos]. Tenga en cuenta que el nombre de la clase de interfaz no puede ser el mismo
- Escriba el archivo yrm, configure [información de origen de datos], preste atención al uso de jdbcurl, no url
- Escriba la clase de configuración para inyectar [Fuente de datos], [SqlSessionFactory] y configure la información de ubicación de [Archivo de interfaz] y [Archivo de asignación].
spring:
datasource:
bookstore:
jdbcurl: jdbc:mysql://localhost:3306/bookstore2?serverTimezone=UTC # 这个是jdbcurl不是url。
username: root
password: 1230
driver-class-name: com.mysql.cj.jdbc.Driver
test:
jdbcurl: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: 1230
driver-class-name: com.mysql.cj.jdbc.Driver
- @MapperScan se usa para especificar [clase de interfaz], información [SqlSession]
- A continuación, cree la fuente de datos.
- Cree una fábrica SqlSession y configure la ubicación del archivo de asignación. Tenga en cuenta el uso de este método getResources. No obtenerRecurso.
- Crear una fábrica de gestión de transacciones
package com.springboot.config;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.annotation.Resources;
import javax.sql.DataSource;
/**
* @author: Zekun Fu
* @date: 2023/4/10 17:59
* @Description: 第一个数据源的配置
*/
@Configuration
// 指定接口包,数据源
@MapperScan(basePackages = "com.springboot.dto.bookstore", sqlSessionFactoryRef = "bookStoreSqlSessionFactory")
public class BookStoreDataSourceConfig {
// 指定扫描文件
private static final String MAPPER_LOCATION = "classpath*:mapper/bookStore/*.xml";
@Primary
@Bean(name = "bookStoreDataSource")
@ConfigurationProperties(prefix = "spring.datasource.bookstore")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
/**
* 事务管理器
*/
@Bean(name = "bookStoreTransactionManager")
public PlatformTransactionManager dataSourceTransactionManager(@Qualifier("bookStoreDataSource") DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Primary
@Bean(name = "bookStoreSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("bookStoreDataSource") DataSource dataSource) throws Exception{
final SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
Resource[] resources = new PathMatchingResourcePatternResolver().getResources(BookStoreDataSourceConfig.MAPPER_LOCATION);
sessionFactoryBean.setMapperLocations(resources);
return sessionFactoryBean.getObject();
}
}