spring boot多数据源

本文介绍了一种使用MyBatis框架配置多个数据源的方法,包括数据源配置、SqlSessionFactory配置及事务管理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//数据源一import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.bind.RelaxedPropertyResolver;import org.springframework.context.EnvironmentAware;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.Primary;import org.springframework.core.env.Environment;import org.springframework.core.io.DefaultResourceLoader;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;@Configuration@ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class })@MapperScan(basePackages = { "com.hhly.template.dao.database" },sqlSessionFactoryRef="primarySqlSessionFactory")public class PrimaryMybatisConfiguration implements EnvironmentAware { private static Log logger = LogFactory.getLog(PrimaryMybatisConfiguration.class); private RelaxedPropertyResolver propertyResolver; private Environment env; public void setEnvironment(Environment environment) { this.env = environment; this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.primaryDataSource."); } @Bean(name = "primaryDataSource",destroyMethod="shutdown") @Primary public DataSource dataSource() { logger.info("Configruing primaryDataSource start..."); HikariConfig config = new HikariConfig(); config.setDataSourceClassName(propertyResolver.getProperty("dataSourceClassName")); config.addDataSourceProperty("url", propertyResolver.getProperty("url")); config.setUsername(propertyResolver.getProperty("username")); config.setPassword(propertyResolver.getProperty("password")); //config.setConnectionTestQuery(propertyResolver.getProperty("connectionTestQuery")); logger.info("Configruing primaryDataSource end..."); return new HikariDataSource(config); } @Bean(name = "primarySqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactory() { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setTypeAliasesPackage(propertyResolver.getProperty("typeAliasesPackage")); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(propertyResolver.getProperty("mapperLocations"))); sessionFactory.setConfigLocation( new DefaultResourceLoader().getResource(propertyResolver.getProperty("configLocation"))); logger.info("初始化sqlSessionFactory成功!"); return sessionFactory.getObject(); } catch (Exception e) { e.printStackTrace(); logger.error(e.getMessage()); return null; } } @Bean(name = "primaryTransactionManager") @Primary public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); }}//数据源二import com.zaxxer.hikari.HikariConfig;import com.zaxxer.hikari.HikariDataSource;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.bind.RelaxedPropertyResolver;import org.springframework.context.EnvironmentAware;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.env.Environment;import org.springframework.core.io.DefaultResourceLoader;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.persistence.EntityManager;import javax.sql.DataSource;@Configuration@ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class })@MapperScan(basePackages = { "com.hhly.template.dao.middatabase" },sqlSessionFactoryRef="midSqlSessionFactory")public class MiddleMybatisConfiguration implements EnvironmentAware { private static Log logger = LogFactory.getLog(MiddleMybatisConfiguration.class); private RelaxedPropertyResolver propertyResolver; private Environment env; public void setEnvironment(Environment environment) { this.env = environment; this.propertyResolver = new RelaxedPropertyResolver(environment, "spring.datasource.middleDataSource."); } @Bean(name = "middleDataSource",destroyMethod="shutdown") public DataSource dataSource() { logger.info("Configruing MiddleDataSource start..."); HikariConfig config = new HikariConfig(); config.setDataSourceClassName(propertyResolver.getProperty("dataSourceClassName")); config.addDataSourceProperty("url", propertyResolver.getProperty("url")); config.setUsername(propertyResolver.getProperty("username")); config.setPassword(propertyResolver.getProperty("password")); config.setConnectionTestQuery(propertyResolver.getProperty("connectionTestQuery")); logger.info("Configruing MiddleDataSource end..."); return new HikariDataSource(config); } @Bean(name = "midSqlSessionFactory") public SqlSessionFactory sqlSessionFactory() { try { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setTypeAliasesPackage(propertyResolver.getProperty("typeAliasesPackage")); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(propertyResolver.getProperty("mapperLocations"))); sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(propertyResolver.getProperty("configLocation"))); logger.info("初始化sqlSessionFactory成功!"); return sessionFactory.getObject(); } catch (Exception e) { e.printStackTrace(); logger.error(e.getMessage()); return null; } } @Bean(name = "midTransactionManager") public DataSourceTransactionManager transactionManager() { return new DataSourceTransactionManager(dataSource()); }}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值