spring boot 配置双数据源
springboot 配置双数据库源
·
spring boot 配置双数据源
- yml 数据源配置
spring:
datasource_1:
driver-class-name: com.mysql.jdbc.Driver
#数据库连接配置
url: 数据库连接
username: root
password: password
datasource_2:
driver-class-name: com.mysql.jdbc.Driver
url: 数据库连接
username: root
password:
-
项目结构
dao层 需要使用两个包,一个是主数据源,一个副数据源
mapper 也需要有两个文件夹 来存放xml 文件
-
主要配置代码
- 主数据源 master
@Configuration @MapperScan(basePackages = MasterSourceConfig.PACKAGE_PATH,sqlSessionFactoryRef = "masterSqlSessionFactory") public class MasterSourceConfig { static final String PACKAGE_PATH="com.demo.dao.master"; static final String MAPPER_LOCATION="classpath*:mapper/master/*.xml"; @Value("${spring.datasource_1.url}") private String url; @Value("${spring.datasource_1.username}") private String userName; @Value("${spring.datasource_1.password}") private String password; @Value("${spring.datasource_1.driver-class-name}") private String driverClass; @Bean(name = "masterDataSource") @Primary public DataSource dataSource(){ // HikariDataSource hikariDataSource =new HikariDataSource(); // hikariDataSource.setDriverClassName(driverClass); // hikariDataSource.setJdbcUrl(url1); // hikariDataSource.setUsername(userName); // hikariDataSource.setPassword(password); //使用druid 连接池 DruidDataSource druidDataSource =new DruidDataSource(); druidDataSource.setDriverClassName(driverClass); druidDataSource.setUrl(url); druidDataSource.setUsername(userName); druidDataSource.setPassword(password); return druidDataSource; } @Bean(name="masterTransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager(){ return new DataSourceTransactionManager(dataSource()); } @Bean(name = "masterSqlSessionFactory") @Primary public SqlSessionFactory sqlSessionFactory (@Qualifier("masterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean sessionFactoryBean =new SqlSessionFactoryBean(); org.apache.ibatis.session.Configuration configuration =new org.apache.ibatis.session.Configuration(); //将mysql 中表的下滑线字段映射称驼峰字段 configuration.setMapUnderscoreToCamelCase(true); sessionFactoryBean.setConfiguration(configuration); sessionFactoryBean.setDataSource(dataSource); sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MasterSourceConfig.MAPPER_LOCATION)); return sessionFactoryBean.getObject(); }
- 副数据源 second
@Configuration @MapperScan(basePackages = SecondSourceConfig.PACKAGE_PATH,sqlSessionFactoryRef = "secondSqlSessionFactory") public class SecondSourceConfig { static final String PACKAGE_PATH="com.demo.dao.second"; static final String MAPPER_PATH="classpath*:mapper/second/*.xml"; @Value("${spring.datasource_2.url}") private String url; @Value("${spring.datasource_2.username}") private String userName; @Value("${spring.datasource_2.password}") private String password; @Value("${spring.datasource_2.driver-class-name}") private String driverClass; @Bean(name = "secondDataSource") public DataSource secondDataSource(){ DruidDataSource druidDataSource =new DruidDataSource(); druidDataSource.setDriverClassName(driverClass); druidDataSource.setUrl(url); druidDataSource.setUsername(userName); druidDataSource.setPassword(password); return druidDataSource; } @Bean(name = "secondTransactionManager") public DataSourceTransactionManager secondTransactionManager(){ return new DataSourceTransactionManager(secondDataSource()); } @Bean(name = "secondSqlSessionFactory") public SqlSessionFactory clusterSqlSessionFactory(@Qualifier("secondDataSource") DataSource clusterDataSource) throws Exception { final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(clusterDataSource); sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() .getResources(SecondSourceConfig.MAPPER_PATH)); return sessionFactory.getObject(); } }
-
启动类需要禁止一些类自动注入
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, JdbcTemplateAutoConfiguration.class,})
更多推荐
已为社区贡献1条内容
所有评论(0)