springboot同时配置mysql和SqlServer多个数据源

一:简介

近期在开发项目中,需要同时从mysql和SqlServer数据库拿取数据。本示例以springboot架子简单介绍下如何同时配置并拿取到不同数据库数据。

二:编码

  1. application.yml文件配置
	spring:
	  datasource:
	  	#mysql配置
	    master:	#数据源名称
	      driver-class-name: com.mysql.cj.jdbc.Driver
	      jdbc-url: jdbc:mysql://ip:port/数据库名称?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
	      username: 账户
	      password: 密码
	      type: com.alibaba.druid.pool.DruidDataSource
		#SqlServer配置
		other: #数据源名称
	      driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
	      jdbc-url: jdbc:sqlserver://ip:port;Databasename=数据库名称
	      username: 账户
	      password: 密码
	      min-evictable-idle-time-millis: 1800000 #连接池空闲连接的有效时间 ,设置30分钟
	      initial-size: 5
	      max-active: 10
	      max-wait: 60000
	      min-idle: 5
  1. 集成mysql数据库Configuration初始化配置
@Configuration
@MapperScan(basePackages ="mapper路径(如:com.a.b.mapper)", sqlSessionFactoryRef = "masterSqlSessionFactory")
public class MybatisDbMasterConfig {

    @Primary
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")
    //这里需要注意下:spring.datasource.master中,master名称是application.yml数据库配置的数据源名称
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name = "masterSqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("entity路径(如:com.a.b.entity)");
        factoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("xml文件路径(如:classpath:com/a/b/mapper/*.xml)"));
        return factoryBean.getObject();
    }

    @Primary
    @Bean(name = "masterTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("masterDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    @Bean(name = "masterSqlSessionTemplate")
    @Primary
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}
  1. 集成SqlServer数据库Configuration初始化配置
@Configuration
@MapperScan(basePackages = "mapperThree路径(如:com.a.b.mapperThree)", sqlSessionFactoryRef = "otherSqlSessionFactory")
public class MybatisDbOtherConfig {

    //这里需要注意下:spring.datasource.other中,other名称是application.yml数据库配置的数据源名称
    @Bean(name = "otherDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.other")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "otherTransactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("otherDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);

    }

    @Bean(name = "otherSqlSessionFactory")
    public SqlSessionFactory basicSqlSessionFactory(@Qualifier("otherDataSource") DataSource basicDataSource) throws Exception {
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(basicDataSource);
        factoryBean.setMapperLocations(
                new PathMatchingResourcePatternResolver().getResources("xml文件路径(如:classpath:com/a/b/mapperThree/*.xml)"));
        return factoryBean.getObject();
    }

    @Bean(name = "otherSqlSessionTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(
            @Qualifier("otherSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

…后面就是根据初始化类里面的路径写dao层和mapper xml文件sql数据语句了。。。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Spring Boot配置数据源的示例: 1. 创建两个数据库 我们将创建两个MySQL数据库:mydb1和mydb2。在每个数据库中,我们将创建一个表:user。 CREATE DATABASE mydb1; USE mydb1; CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); CREATE DATABASE mydb2; USE mydb2; CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50)); 2. 添加依赖 在pom.xml文件中添加以下依赖: ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> </dependencies> ``` 3. 配置数据源 在application.properties文件中添加以下配置: ``` # 数据源1 spring.datasource.one.url=jdbc:mysql://localhost:3306/mydb1?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.one.username=root spring.datasource.one.password=root spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver # 数据源2 spring.datasource.two.url=jdbc:mysql://localhost:3306/mydb2?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.two.username=root spring.datasource.two.password=root spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver ``` 4. 配置JPA 在application.properties文件中添加以下配置: ``` # JPA配置1 spring.jpa.one.database=default spring.jpa.one.show-sql=true spring.jpa.one.hibernate.ddl-auto=update # JPA配置2 spring.jpa.two.database=default spring.jpa.two.show-sql=true spring.jpa.two.hibernate.ddl-auto=update ``` 5. 创建实体类 在src/main/java目录下创建两个实体类:User1和User2,分别对应mydb1和mydb2数据库中的user表。 User1.java: ``` @Entity @Table(name="user") public class User1 { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; private String name; // getter和setter方法 } ``` User2.java: ``` @Entity @Table(name="user") public class User2 { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; private String name; // getter和setter方法 } ``` 6. 创建Repository 在src/main/java目录下创建两个Repository接口:User1Repository和User2Repository,分别对应mydb1和mydb2数据库中的user表。 User1Repository.java: ``` @Repository public interface User1Repository extends JpaRepository<User1, Integer> { } ``` User2Repository.java: ``` @Repository public interface User2Repository extends JpaRepository<User2, Integer> { } ``` 7. 创建Service 在src/main/java目录下创建两个Service类:User1Service和User2Service,分别对应mydb1和mydb2数据库中的user表。 User1Service.java: ``` @Service public class User1Service { @Autowired private User1Repository user1Repository; // 方法1:获取所有用户 public List<User1> getAllUsers() { return user1Repository.findAll(); } // 方法2:添加一个用户 public void addUser(User1 user) { user1Repository.save(user); } } ``` User2Service.java: ``` @Service public class User2Service { @Autowired private User2Repository user2Repository; // 方法1:获取所有用户 public List<User2> getAllUsers() { return user2Repository.findAll(); } // 方法2:添加一个用户 public void addUser(User2 user) { user2Repository.save(user); } } ``` 8. 测试 在src/test/java目录下创建一个测试类:MultiDataSourceTest。 MultiDataSourceTest.java: ``` @SpringBootTest public class MultiDataSourceTest { @Autowired private User1Service user1Service; @Autowired private User2Service user2Service; // 测试方法1:添加一个用户到mydb1数据库的user表中 @Test public void testAddUser1() { User1 user = new User1(); user.setName("张三"); user1Service.addUser(user); } // 测试方法2:添加一个用户到mydb2数据库的user表中 @Test public void testAddUser2() { User2 user = new User2(); user.setName("李四"); user2Service.addUser(user); } // 测试方法3:获取mydb1数据库中user表中的所有用户 @Test public void testGetAllUsers1() { List<User1> users = user1Service.getAllUsers(); for (User1 user : users) { System.out.println(user.getName()); } } // 测试方法4:获取mydb2数据库中user表中的所有用户 @Test public void testGetAllUsers2() { List<User2> users = user2Service.getAllUsers(); for (User2 user : users) { System.out.println(user.getName()); } } } ``` 运行测试类,可以看到输出的结果: ``` 张三 李四 ``` 这表明我们已经成功地配置多个数据源,并使用JPA和Repository来访问它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值