暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringBoot系列--Mysql、Sqlserver 双数据源配置

TC 谈 2020-04-11
1487

在最近的项目开发中,需要用到Mysql和Sqlserverl两种数据库,也就是要进行双数据源的配置。网上看了下,大多比较繁琐,且不够明确。今天分享一个在SpringBoot 中简洁高效配置双数据源的方案。项目结构如下:

application.properties配置文件

  1. spring.datasource.mysql.username=root

  2. spring.datasource.mysql.password=123456

  3. spring.datasource.mysql.driver-class-name=com.mysql.jdbc.Driver

  4. spring.datasource.mysql.url=jdbc:mysql://localhost:3306/test


  5. spring.datasource.sqlserver.username=root

  6. spring.datasource.sqlserver.password=123456

  7. spring.datasource.sqlserver.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

  8. spring.datasource.sqlserver.url=jdbc:sqlserver://localhost:1433;DatabaseName=test

连接池配置

  1. package com.tcwong.demo.config;


  2. import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;

  3. import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;

  4. import org.springframework.context.annotation.Bean;

  5. import org.springframework.context.annotation.Configuration;

  6. import org.springframework.context.annotation.Primary;


  7. import javax.sql.DataSource;


  8. @Configuration

  9. public class DataSourceConfig {


  10. @Primary

  11. @Bean

  12. @ConditionalOnProperty(prefix = "spring.datasource.mysql")

  13. public DataSource mysqlDataSource() {

  14. return DruidDataSourceBuilder.create().build();

  15. }


  16. @Bean

  17. @ConditionalOnProperty(prefix = "spring.datasource.sqlserver")

  18. public DataSource sqlserverDataSource() {

  19. return DruidDataSourceBuilder.create().build();

  20. }


  21. }

或者

  1. package com.tcwong.demo.config;


  2. import com.alibaba.druid.pool.DruidDataSource;

  3. import org.springframework.beans.factory.annotation.Value;

  4. import org.springframework.context.annotation.Bean;

  5. import org.springframework.context.annotation.Configuration;

  6. import org.springframework.context.annotation.Primary;


  7. import javax.sql.DataSource;


  8. @Configuration

  9. public class DataSourceConfig1 {


  10. @Value("${spring.datasource.mysql.username}")

  11. private String mysqlUserName;

  12. @Value("${spring.datasource.mysql.password}")

  13. private String mysqlPassword;

  14. @Value("${spring.datasource.mysql.url}")

  15. private String mysqlUrl;

  16. @Value("${spring.datasource.mysql.driver-class-name}")

  17. private String mysqlDriverClass;


  18. @Value("${spring.datasource.sqlserver.username}")

  19. private String sqlserverPassword;

  20. @Value("${spring.datasource.sqlserver.password}")

  21. private String sqlserverUserName;

  22. @Value("${spring.datasource.sqlserver.url}")

  23. private String sqlserverUrl;

  24. @Value("${spring.datasource.sqlserver.driver-class-name}")

  25. private String sqlserverDriverClass;


  26. @Primary

  27. @Bean

  28. public DataSource mysqlDataSource() {

  29. DruidDataSource druidDataSource = new DruidDataSource();

  30. druidDataSource.setUsername(mysqlUserName);

  31. druidDataSource.setPassword(mysqlPassword);

  32. druidDataSource.setUrl(mysqlUrl);

  33. druidDataSource.setDriverClassName(mysqlDriverClass);

  34. return druidDataSource;

  35. }


  36. @Bean

  37. public DataSource sqlserverDataSource() {

  38. DruidDataSource druidDataSource = new DruidDataSource();

  39. druidDataSource.setUsername(sqlserverUserName);

  40. druidDataSource.setPassword(sqlserverPassword);

  41. druidDataSource.setUrl(sqlserverUrl);

  42. druidDataSource.setDriverClassName(sqlserverDriverClass);

  43. return druidDataSource;

  44. }


  45. }

MyBatis配置

Mysql配置

  1. package com.tcwong.demo.config;


  2. import org.apache.ibatis.session.SqlSessionFactory;

  3. import org.mybatis.spring.SqlSessionFactoryBean;

  4. import org.mybatis.spring.SqlSessionTemplate;

  5. import org.mybatis.spring.annotation.MapperScan;

  6. import org.springframework.context.annotation.Bean;

  7. import org.springframework.context.annotation.Configuration;

  8. import org.springframework.context.annotation.Primary;

  9. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;


  10. import javax.annotation.Resource;

  11. import javax.sql.DataSource;


  12. @Configuration

  13. @MapperScan(basePackages = "com.tcwong.demo.dao.mysql"

  14. ,sqlSessionFactoryRef = "mysqlSqlSessionFactory",sqlSessionTemplateRef = "mysqlSqlSessionTemplate")

  15. public class MysqlMapperConfig {


  16. @Resource

  17. private DataSource mysqlDataSource;


  18. @Primary

  19. @Bean

  20. SqlSessionFactory mysqlSqlSessionFactory() {

  21. SqlSessionFactory sqlSessionFactory = null;

  22. try {

  23. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

  24. sqlSessionFactoryBean.setDataSource(mysqlDataSource);

  25. sqlSessionFactoryBean.setTypeAliasesPackage("com.tcwong.demo.bean");

  26. sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

  27. .getResource("classpath*:mapper/**/*.xml"));

  28. sqlSessionFactory = sqlSessionFactoryBean.getObject();

  29. } catch (Exception e) {

  30. e.printStackTrace();

  31. }

  32. return sqlSessionFactory;

  33. }


  34. @Primary

  35. @Bean

  36. SqlSessionTemplate mysqlSqlSessionTemplate() {

  37. return new SqlSessionTemplate(mysqlSqlSessionFactory());

  38. }

  39. }

Sqlserver配置

  1. package com.tcwong.demo.config;


  2. import org.apache.ibatis.session.SqlSessionFactory;

  3. import org.mybatis.spring.SqlSessionFactoryBean;

  4. import org.mybatis.spring.SqlSessionTemplate;

  5. import org.mybatis.spring.annotation.MapperScan;

  6. import org.springframework.context.annotation.Bean;

  7. import org.springframework.context.annotation.Configuration;

  8. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;


  9. import javax.annotation.Resource;

  10. import javax.sql.DataSource;


  11. @Configuration

  12. @MapperScan(basePackages = "com.tcwong.demo.dao.sqlserver"

  13. ,sqlSessionFactoryRef = "sqlserverSqlSessionFactory", sqlSessionTemplateRef = "sqlserverSqlSessionTemplate")

  14. public class sqlserverMapperConfig {


  15. @Resource

  16. private DataSource sqlserverDataSource;


  17. @Bean

  18. SqlSessionFactory sqlserverSqlSessionFactory() {

  19. SqlSessionFactory sqlSessionFactory = null;

  20. try {

  21. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

  22. sqlSessionFactoryBean.setDataSource(sqlserverDataSource);

  23. sqlSessionFactoryBean.setTypeAliasesPackage("com.tcwong.demo.bean");

  24. sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()

  25. .getResource("classpath*:mapper/**/*.xml"));

  26. sqlSessionFactory = sqlSessionFactoryBean.getObject();

  27. } catch (Exception e) {

  28. e.printStackTrace();

  29. }

  30. return sqlSessionFactory;

  31. }


  32. @Bean

  33. SqlSessionTemplate sqlserverSqlSessionTemplate() {

  34. return new SqlSessionTemplate(sqlserverSqlSessionFactory());

  35. }

  36. }

这里指定了xml的文件路径 和 数据库映射的JavaBean路径

Mysql 和 Sqlserver对应的Mapper 放在对应的Dao即可

《 完 》


谢谢大家持续关注TC

你们的每一个交流和【在看】都是TC持续更新的动力


文章转载自TC 谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论