背景:原来一直都是使用mysql数据库,在application.properties 中配置数据库信息

spring.datasource.url=jdbc:mysql://xxxx/test

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

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

spring.datasource.username=xxx

spring.datasource.password=xxx

这样spring boot会自动化配置,我们用spring boot 约定的配置,现在由于业务的需要,另加一个数据源sqlServer。下面是具体步骤以及遇到的一系列问题。

一、导入依赖
  1. pom.xml文件:
  2. <dependency>
  3. <groupId>com.microsoft.sqlserver</groupId>
  4. <artifactId>mssql-jdbc</artifactId>
  5. <version>6.4.0.jre8</version>
  6. <scope>runtime</scope>
  7. </dependency>
二.在application.properties中配置
  1. spring.datasource.second.jdbc-url=jdbc:sqlserver://xxxxx:1433;DatabaseName=test
  2. spring.datasource.second.username=xxx
  3. spring.datasource.second.password=xxxx
  4. spring.datasource.second.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
  5.  
  6. 注意1:连接数据库的方式不一样,mysql是/test ,sqlServer是;DatabaseName=test
  7. spring.datasource.url=jdbc:mysql://xxxx/test
  8. spring.datasource.second.jdbc-url=jdbc:sqlserver://xxxxx:1433;DatabaseName=test
三.配置sqlServer数据源
  1. package com.ieou.qmt.common;
  2. import org.apache.ibatis.session.SqlSessionFactory;
  3. import org.mybatis.spring.SqlSessionFactoryBean;
  4. import org.springframework.beans.factory.annotation.Qualifier;
  5. import org.springframework.boot.context.properties.ConfigurationProperties;
  6. import org.springframework.boot.jdbc.DataSourceBuilder;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  10. import org.springframework.core.io.support.ResourcePatternResolver;
  11. import org.springframework.jdbc.core.JdbcTemplate;
  12. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  13. import org.springframework.transaction.PlatformTransactionManager;
  14. import javax.sql.DataSource;
  15.  
  16. @Configuration
  17. public class SqlServerDataSourceConfig {
  18.  
  19. @Bean(name = "sqlServerDataSource")
  20. @Qualifier("sqlServerDataSource")
  21. @ConfigurationProperties(prefix="spring.datasource.second")
  22. public DataSource getMyDataSource(){
  23. return DataSourceBuilder.create().build();
  24. }
  25.  
  26. @Bean(name = "secondaryJdbcTemplate")
  27. public JdbcTemplate secondaryJdbcTemplate(
  28. @Qualifier("sqlServerDataSource") DataSource dataSource) {
  29. return new JdbcTemplate(dataSource);
  30. }
  31. }

总结:

配置到这里就可以使用JdbcTemplate来操作sqlServer了,(mysql是spring boot的自动化配置,sqlServer是我们手动配置的)只要在类中注入即可
例如:(JdbcTemplate 的用法自行百度)
public class IEOUMallServiceImpl implements IEOUMallService{
@Autowired
@Qualifier("secondaryJdbcTemplate")
protected JdbcTemplate jdbcTemplate2;
}

四.以上配置完成后在执行带有@Transactional 事务的接口时会发现报错:
  1. "org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type
  2.  
  3. 'org.springframework.transaction.PlatformTransactionManager' available\n\tat
  4.  
  5. org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:347)\n\tat
  6.  
  7. org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)\n\tat
  8.  
  9. org.springframework.transaction.interceptor.TransactionAspectSupport.determineTransactionManage
所以:我们必须手动分别配置mysql与sqlServer
1.配置文件:application.properties 需要改为如下:
  1. spring.datasource.first.jdbc-url=jdbc:mysql://xxxx:3306/test
  2. (这里要是jdbc-url,不然会报jdbcUrl is required with driverClassName的错误)
  3. spring.datasource.first.type=com.alibaba.druid.pool.DruidDataSource
  4. spring.datasource.first.driver-class-name=com.mysql.jdbc.Driver
  5. spring.datasource.first.username=xxx
  6. spring.datasource.first.password=xxx
  7.  
  8. spring.datasource.second.jdbc-url=jdbc:sqlserver://xxxx:1433;DatabaseName=test
  9. spring.datasource.second.username=xxx
  10. spring.datasource.second.password=xxx
  11. spring.datasource.second.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
2.原来的SqlServerDataSourceConfig改为如下:
  1. package com.ieou.qmt.common;
  2.  
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqlSessionFactoryBean;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.boot.jdbc.DataSourceBuilder;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  11. import org.springframework.core.io.support.ResourcePatternResolver;
  12. import org.springframework.jdbc.core.JdbcTemplate;
  13. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14. import org.springframework.transaction.PlatformTransactionManager;
  15.  
  16. import javax.sql.DataSource;
  17.  
  18. @Configuration
  19. public class SqlServerDataSourceConfig {
  20.  
  21. private static final String MAPPER_PATH = "classpath:mybatis/mapping/mapper/*.xml";
  22.  
  23. private static final String ENTITY_PACKAGE = "com.ieou.qmt.mapper";
  24.  
  25. @Bean(name = "sqlServerDataSource")
  26. @Qualifier("sqlServerDataSource")
  27. @ConfigurationProperties(prefix="spring.datasource.second")
  28. public DataSource getMyDataSource(){
  29. return DataSourceBuilder.create().build();
  30. }
  31.  
  32. @Bean(name = "secondaryJdbcTemplate")
  33. public JdbcTemplate secondaryJdbcTemplate(
  34. @Qualifier("sqlServerDataSource") DataSource dataSource) {
  35. return new JdbcTemplate(dataSource);
  36. }
  37.  
  38. @Bean(name = "second.SqlSessionTemplate")
  39. public SqlSessionFactory devSqlSessionFactory(
  40. @Qualifier("sqlServerDataSource") DataSource ddataSource)
  41. throws Exception {
  42. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  43. sessionFactory.setDataSource(ddataSource);
  44. ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  45. sessionFactory.setMapperLocations(resolver.getResources(MAPPER_PATH));
  46. sessionFactory.setTypeAliasesPackage(ENTITY_PACKAGE);
  47. return sessionFactory.getObject();
  48. }
  49.  
  50. @Bean
  51. public PlatformTransactionManager sqlServerTransactionManager(@Qualifier("sqlServerDataSource") DataSource sqlServerDataSource)
  52. {
  53. return new DataSourceTransactionManager(sqlServerDataSource);
  54. }
  55.  
  56. }
3.新建mysql配置文件如下:
  1. package com.ieou.qmt.common;
  2.  
  3. import org.apache.ibatis.session.SqlSessionFactory;
  4. import org.mybatis.spring.SqlSessionFactoryBean;
  5. import org.springframework.beans.factory.annotation.Qualifier;
  6. import org.springframework.boot.context.properties.ConfigurationProperties;
  7. import org.springframework.boot.jdbc.DataSourceBuilder;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.Configuration;
  10. import org.springframework.context.annotation.Primary;
  11. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
  12. import org.springframework.core.io.support.ResourcePatternResolver;
  13. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  14. import org.springframework.transaction.PlatformTransactionManager;
  15.  
  16. import javax.sql.DataSource;
  17.  
  18. @Configuration
  19. public class MysqlDataSourceConfig {
  20.  
  21. private static final String MAPPER_PATH = "classpath:mybatis/mapping/*.xml";
  22.  
  23. private static final String ENTITY_PACKAGE = "com.ieou.qmt.mapper";
  24.  
  25. @Bean(name = "dataSource")
  26. @Primary
  27. @Qualifier("dataSource")
  28. @ConfigurationProperties(prefix="spring.datasource.first")
  29. public DataSource getMyDataSource(){
  30. return DataSourceBuilder.create().build();
  31. }
  32.  
  33. @Bean(name = "first.SqlSessionTemplate")
  34. @Primary
  35. public SqlSessionFactory devSqlSessionFactory(
  36. @Qualifier("dataSource") DataSource ddataSource)
  37. throws Exception {
  38. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  39. sessionFactory.setDataSource(ddataSource);
  40. ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  41. sessionFactory.setMapperLocations(resolver.getResources(MAPPER_PATH));
  42. sessionFactory.setTypeAliasesPackage(ENTITY_PACKAGE);
  43. return sessionFactory.getObject();
  44. }
  45.  
  46. @Bean
  47. @Primary
  48. public PlatformTransactionManager mysqlTransactionManager(@Qualifier("dataSource") DataSource mysqlDataSource)
  49. {
  50. return new DataSourceTransactionManager(mysqlDataSource);
  51. }
  52. }
4.从事务管理器中选择一个事务,在方法上加@Transactional(value = "mysqlTransactionManager",rollbackFor = Exception.class)
 
至此:配置完毕,如有不足或不对的地方,请补充。

spring boot 配置双数据源mysql、sqlServer的更多相关文章

  1. Spring Boot配置多数据源并实现Druid自动切换

    原文:https://blog.csdn.net/acquaintanceship/article/details/75350653 Spring Boot配置多数据源配置yml文件主数据源配置从数据 ...

  2. 如何通过Spring Boot配置动态数据源访问多个数据库

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  3. spring项目配置双数据源读写分离

    我们最早做新项目的时候一直想做数据库的读写分离与主从同步,由于一些原因一直没有去做这个事情,这次我们需要配置双数据源的起因是因为我们做了一个新项目用了另一个数据库,需要把这个数据库的数据显示到原来的后 ...

  4. spring boot 2.0 配置双数据源 MySQL 和 SqlServer

    参考:https://www.cnblogs.com/xiaofengfeng/p/9552816.html 安装 org.mybatis.spring.boot:mybatis-spring-boo ...

  5. springboot配置双数据源 MySQL和SqlServer

    1. pom文件的驱动jar包加上去, compile 'com.microsoft.sqlserver:mssql-jdbc:6.2.2.jre8' 2. application.yml sprin ...

  6. spring+mybatis 配置双数据源

    配置好后,发现网上已经做好的了, 不过,跟我的稍有不同, 我这里再拿出来现个丑: properties 文件自不必说,关键是这里的xml: <?xml version="1.0&quo ...

  7. spring boot 配置多数据源

    https://www.jianshu.com/p/b2e53a2521fc

  8. Spring Boot2.4双数据源的配置

    相较于单数据源,双数据源配置有时候在数据分库的时候可能更加有利 但是在参考诸多博客以及书籍(汪云飞的实战书)的时候,发现对于spring boot1.X是完全没问题的,一旦切换到spring boot ...

  9. Spring boot配置多个Redis数据源操作实例

    原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例 ...

随机推荐

  1. HTML(续)

    1.有frame就无body,框架的noresize:设置框架大小不能改变.2.链接在框架中的应用target:有定为目标的功能.<a href = "链接源地址" targ ...

  2. bzoj 3083

    bzoj 3083 树链剖分,换根 对于一颗树有以下操作 1.确定x为根,2.将u到v的简单路径上的数全改成c,3.询问当前以x为根的子树中的节点最小权值. 如果没有操作1:树链剖分很明显. 于是考虑 ...

  3. imageio.ffmpeg.download() has been deprecated. Use 'pip install im ageio-ffmpeg' instead.'

    Use this instead: sudo pip3 install imageio==2.4.1

  4. IOS 苹果手机fiddler抓包时出现了tunnel to 443 解决方案,亲测有效

    先上一张捉取成功图[版本需4.0以上,并非所有https数据可抓取,具体原因未知] 1.先对Fiddler进行设置[打开Fiddler ——> Options .然后打开的对话框中,选择HTTP ...

  5. jquery .width和css("width", )区别

    1.$.fn.width会根据是否是borderBox来计算新的宽度,如果是borderBox,会额外加上padding和border的宽度,计算时只是按照px来,用rem做单位会出错: 2.$.fn ...

  6. Exp2_固件程序设计 20165226_20165310_20165315

    Exp2_固件程序设计 20165226_20165310_20165315 Exp2_1 MDK 实验内容 注意不经老师允许不准烧写自己修改的代码 两人(个别三人)一组 参考云班课资源中" ...

  7. django基础 -- 2. django初识

    一.模块渲染  jinja2 实现简单的字符串替换(动态页面) 1.下载 pip install jinja2 示例 : html文件中 <!DOCTYPE html> <html ...

  8. 前端 --- 7 Bootstrop框架

    一.基本结构 1.下载地址   官方地址:https://getbootstrap.com 中文地址:http://www.bootcss.com/ 2.HTML基本搭建结构 <!DOCTYPE ...

  9. Restful framework【第六篇】认证组件

    基本用法 -认证功能 1 写一个类,继承BaseAuthentication 2 def authenticate(self,request) ,记住传request对象 -如果验证通过,返回None ...

  10. SpringBoot 整合携程Apollo配置管理中心

    携程官网对apollo的使用讲解了很多种方式的使用,但是感觉一些细节还是没讲全,特别是eureka配置中心地址的配置 这里对springboot整合apollo说一下 >SpringBoot启动 ...