加拿大机器人

pc28机器人 ,pc蛋蛋机器人,加拿大pc算账机器人

Springboot 实现多数据源(PostgreSQL 和 SQL Server)连接(一)

在企业级应用开发中,单一数据源往往难以满足复杂业务需求。例如部分核心业务数据存储于PostgreSQL,而历史归档数据则存放在SQL Server,这时就需要Spring Boot项目同时连接多种异构数据库。本文将详细介绍如何在Spring Boot中实现PostgreSQL与SQL Server的多数据源配置,为后续动态切换打下基础。

一、环境准备与依赖引入

首先需要确保开发环境中已安装JDK 17+、Maven 3.8+,并分别搭建好PostgreSQL和SQL Server数据库实例。在Spring Boot项目的pom.xml中添加必要依赖:

<!-- PostgreSQL驱动 -->
<dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <scope>runtime</scope>
</dependency>
<!-- SQL Server驱动 -->
<dependency>
   <groupId>com.microsoft.sqlserver</groupId>
   <artifactId>mssql-jdbc</artifactId>
   <scope>runtime</scope>
</dependency>
<!-- MyBatis Plus依赖(可选,简化数据库操作) -->
<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.5.3.1</version>
</dependency>

这些依赖将为项目提供数据库连接能力和ORM框架支持。

二、多数据源配置文件编写

application.yml中配置两个数据源的连接信息,分别对应PostgreSQL和SQL Server:

spring:
 datasource:
   postgres:
     jdbc-url: jdbc:postgresql://localhost:5432/business_db
     username: postgres
     password: 123456
     driver-class-name: org.postgresql.Driver
   sqlserver:
     jdbc-url: jdbc:sqlserver://localhost:1433;databaseName=archive_db
     username: sa
     password: SqlServer@123
     driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver

注意SQL Server的URL格式需要指定数据库名称,同时要确保两个数据库的服务处于运行状态,账号密码具备相应的访问权限。

三、数据源配置类实现

创建两个独立的数据源配置类,分别管理PostgreSQL和SQL Server的连接:

// PostgreSQL数据源配置
@Configuration
@MapperScan(basePackages = "com.example.mapper.postgres",
          sqlSessionFactoryRef = "postgresSqlSessionFactory")
public class PostgresDataSourceConfig {

   @Bean(name = "postgresDataSource")
   @ConfigurationProperties(prefix = "spring.datasource.postgres")
   public DataSource postgresDataSource() {
       return DataSourceBuilder.create().build();
   }

   @Bean(name = "postgresSqlSessionFactory")
   public SqlSessionFactory postgresSqlSessionFactory(
           @Qualifier("postgresDataSource") DataSource dataSource) throws Exception {
       SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
       bean.setDataSource(dataSource);
       // 设置MyBatis XML映射文件路径(可选)
       bean.setMapperLocations(new PathMatchingResourcePatternResolver()
               .getResources("classpath:mapper/postgres/*.xml"));
       return bean.getObject();
   }

   @Bean(name = "postgresTransactionManager")
   public DataSourceTransactionManager postgresTransactionManager(
           @Qualifier("postgresDataSource") DataSource dataSource) {
       return new DataSourceTransactionManager(dataSource);
   }
}

SQL Server的配置类与上述结构基本一致,只需将前缀改为spring.datasource.sqlserver,并调整Mapper扫描路径和SQL Session Factory名称。这种配置方式通过@MapperScan注解将不同包下的Mapper接口与对应的数据源绑定,实现物理层面的数据源隔离。

四、测试验证

分别创建对应两个数据库的实体类和Mapper接口,例如PostgreSQL中的User实体和SQL Server中的ArchiveLog实体,然后在Service层注入对应的Mapper进行数据操作测试:

@Service
public class DataSyncService {
   @Autowired
   private UserMapper userMapper;
   
   @Autowired
   private ArchiveLogMapper archiveLogMapper;

   public void syncData() {
       // 从PostgreSQL查询数据
       List<User> users = userMapper.selectList(null);
       // 同步到SQL Server
       users.forEach(user -> {
           ArchiveLog log = new ArchiveLog();
           log.setUserId(user.getId());
           log.setArchiveTime(new Date());
           archiveLogMapper.insert(log);
       });
   }
}

编写单元测试调用syncData方法,观察数据是否能在两个数据库之间正常流转,以此验证多数据源配置的正确性。

通过以上步骤,我们已经在Spring Boot项目中实现了PostgreSQL与SQL Server的多数据源连接。这种静态配置方式适用于数据源固定的场景,下一篇文章将介绍如何通过AOP和自定义注解实现动态数据源切换,满足更复杂的业务需求。 


Powered By Z-BlogPHP 1.7.3

加拿大机器人,pc28机器人 ,pc蛋蛋机器人,加拿大pc算账机器人