springboot后端配置多个数据源、Mysql数据库的便捷方法

2023-12-07数据库
251

下面我为大家详细介绍“Spring Boot后端配置多个数据源、MySQL数据库的便捷方法”攻略。

一、引入相关依赖

在pom.xml文件中,引入MyBatis和多数据源依赖:

<!--MyBatis依赖-->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>${mybatis.version}</version>
</dependency>
<!--多数据源依赖-->
<dependency>
  <groupId>com.zaxxer</groupId>
  <artifactId>HikariCP</artifactId>
  <version>3.4.5</version>
</dependency>

二、配置application.yml文件

在application.yml文件中,进行多数据源的配置,例如配置一个名为primary的数据源和一个名为secondary的数据源。

spring:
  datasource:
    primary:
      jdbc-url: jdbc:mysql://localhost:3306/primary?characterEncoding=utf8&useSSL=false
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      hikari:
        pool-name: primary-db-pool
        minimum-idle: 5
        maximum-pool-size: 20
        connection-timeout: 30000
        idle-timeout: 600000
        max-lifetime: 1800000
    secondary:
      jdbc-url: jdbc:mysql://localhost:3306/secondary?characterEncoding=utf8&useSSL=false
      username: root
      password: 123456
      driver-class-name: com.mysql.jdbc.Driver
      type: com.zaxxer.hikari.HikariDataSource
      hikari:
        pool-name: secondary-db-pool
        minimum-idle: 5
        maximum-pool-size: 20
        connection-timeout: 30000
        idle-timeout: 600000
        max-lifetime: 1800000

三、创建数据源的配置类

根据不同的数据源,在代码中分别创建数据源的配置类,例如:

@Configuration
@EnableTransactionManagement
@MapperScan(basePackages = {"com.example.mapper.primary"}, sqlSessionFactoryRef = "primarySqlSessionFactory")
public class PrimaryDataSourceConfig {

  @Bean(name = "primaryDataSource")
  @Primary
  @ConfigurationProperties(prefix = "spring.datasource.primary")
  public DataSource dataSource() {
      return DataSourceBuilder.create().type(HikariDataSource.class).build();
  }

  @Bean(name = "primarySqlSessionFactory")
  @Primary
  public SqlSessionFactory sqlSessionFactory(@Qualifier("primaryDataSource") DataSource dataSource,
                                     @Qualifier("mybatisConfig") MybatisConfigurationProperties configurationProperties)
      throws Exception {
      final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
      sessionFactory.setDataSource(dataSource);
      sessionFactory.setTypeHandlersPackage("com.example.mybatis.typehandler");
      sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
              .getResources("classpath:mybatis/mapper/primary/*.xml"));
      sessionFactory.setConfiguration(configurationProperties.getConfiguration());
      return sessionFactory.getObject();
  }

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

四、在代码中使用不同数据源

如需要在service层中使用另一个数据源,则需使用@Qualifier注解标明需要使用的数据源,例如:

@Service
@Transactional
public class UserService {

    @Autowired
    @Qualifier("secondarySqlSessionFactory")
    private SqlSessionFactory secondarySqlSessionFactory;

    public User getUserById(Long id) {
        try (SqlSession sqlSession = secondarySqlSessionFactory.openSession()) {
            UserDao userDao = sqlSession.getMapper(UserDao.class);
            return userDao.selectById(id);
        }
    }
}

这样,我们就可以方便地进行多数据源配置了。

另外,如果需要进行读写分离,可以使用ShardingSphere等中间件来实现。

关于在Spring Boot中使用多数据源,我写了一篇博客,里面包含了详细的代码示例:Spring Boot后端配置多个数据源、MySQL数据库的便捷方法。

The End

相关推荐

liunx mysql root账户提示:Your password has expired. To log in yo
liunx mysql root账户提示:Your password has expired. To log in you must change it using a client that supports expired passwords,要怎么操作呢? 1、修改 /etc/my.cnf,在 [mysqld] 小节下添加一行:skip-grant-tables=1 这一行配置让 mysqld 启动...
2024-12-24 数据库
149

快速解决PostgreSQL中的Permission denied问题
下面是针对PostgreSQL中的权限问题的完整攻略。...
2023-12-07 数据库
3413

MySQL时间类型和模式详情
MySQL是一种流行的关系型数据库系统,它提供了多种时间类型和模式,用于存储和处理时间数据。本文将详细介绍MySQL时间类型和模式的详细攻略。...
2023-12-07 数据库
15

VMware中安装CentOS7(设置静态IP地址)并通过docker容器安装mySql数据库(超详细教程)
首先在官网下载CentOS7镜像,并在VMware虚拟机中新建一台CentOS7虚拟机,将镜像挂载到虚拟机中并启动。...
2023-12-07 数据库
11

SpringBoot项目报错:”Error starting ApplicationContext̷
首先,当我们使用Spring Boot开发项目时,可能会遇到Error starting ApplicationContext错误,一般这种错误是由于配置文件、依赖包或者代码逻辑等原因引起的。下面我将提供一条包含两条详细示例说明的完整攻略,用来解决上述问题。...
2023-12-07 数据库
489

Postgresql 赋予用户权限和撤销权限的实例
下面我将详细讲解如何为PostgreSQL数据库中的用户授予权限和撤销权限,包括两个实例。...
2023-12-07 数据库
30