多数据源

284 阅读2分钟

要在Spring Boot项目中同时使用两个数据源(MySQL和SQL Server),并利用MyBatis Plus来操作数据库,你需要遵循以下步骤进行配置。我将提供一个基本的指导,帮助你创建并配置这样的项目。

  1. 创建项目结构 创建一个Spring Boot项目,并在pom.xml文件中添加必要的依赖。这将包括Spring Boot的starter依赖、MyBatis Plus的starter依赖,以及MySQL和SQL Server的JDBC驱动。

  2. 添加依赖 首先,打开你的pom.xml文件,添加以下依赖:

xml org.springframework.boot spring-boot-starter com.baomidou mybatis-plus-boot-starter 3.4.3.4 mysql mysql-connector-java runtime com.microsoft.sqlserver mssql-jdbc runtime org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test 3. 配置application.properties或application.yml 在src/main/resources目录下创建或修改application.yml(或application.properties),设置两个数据源的配置:

yaml spring: datasource: mysql: url: jdbc:mysql://localhost:3306/mysql_db?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true username: mysql_user password: mysql_pass driver-class-name: com.mysql.cj.jdbc.Driver sqlserver: url: jdbc:sqlserver://localhost;databaseName=sqlserver_db; username: sqlserver_user password: sqlserver_pass driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver 4. 配置数据源 你需要为每个数据库创建自定义配置类,来分别配置DataSource、SqlSessionFactory、TransactionManager等。下面是一个示例配置,我们以MySQL为例(SQL Server的配置类似):

首先,创建MySQL的配置:

java @Configuration @MapperScan(basePackages = "com.example.demo.mapper.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate") public class MySqlDataSourceConfig {

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

@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(@Qualifier("mysqlDataSource") DataSource dataSource) throws Exception {
    SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
    bean.setDataSource(dataSource);
    return bean.getObject();
}

@Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager transactionManager(@Qualifier("mysqlDataSource") DataSource dataSource) {
    return new DataSourceTransactionManager(dataSource);
}

@Bean(name = "mysqlSqlSessionTemplate")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
    return new SqlSessionTemplate(sqlSessionFactory);
}

} 对于SQL Server,你需要创建一个类似的配置类,只是要改变相应的Bean名称和配置前缀,以确保两个数据源配置不冲突。

  1. 使用@Qualifier注解区分数据源 在你的Mapper接口或Service层中,使用@Qualifier注解来指定哪个数据源应该被注入,例如:

java @Autowired @Qualifier("mysqlSqlSessionTemplate") private SqlSessionTemplate sqlSessionTemplateMySQL;

@Autowired @Qualifier("sqlServerSqlSessionTemplate") private SqlSessionTemplate sqlSessionTemplateSqlServer; 根据上述步骤,你可以设置多个数据源,并通过MyBatis Plus与它们交互。记住,你需要为每个数据库创建相应的Mapper接口和Mapper XML文件(如果你使用XML方式配置MyBatis Plus),并确保它们位于正确的包或目录下,与你在@MapperScan注解中指定的路径相匹配。