中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

如何使用Spring Boot實現MySQL的讀寫分離

小樊
84
2024-08-07 00:14:21
欄目: 云計算

使用Spring Boot實現MySQL的讀寫分離可以通過配置多個數據源,并在不同的服務中處理讀寫操作。下面是一個簡單的示例:

  1. 配置application.properties文件:
# 主數據源
spring.datasource.master.url=jdbc:mysql://localhost:3306/masterdb
spring.datasource.master.username=root
spring.datasource.master.password=root

# 從數據源
spring.datasource.slave.url=jdbc:mysql://localhost:3306/slavedb
spring.datasource.slave.username=root
spring.datasource.slave.password=root
  1. 創建兩個數據源的配置類:
@Configuration
public class DataSourceConfig {
    
    @Primary
    @Bean(name = "masterDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.master")
    public DataSource masterDataSource() {
        return DataSourceBuilder.create().build();
    }

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

    @Bean(name = "routingDataSource")
    public AbstractRoutingDataSource routingDataSource(@Qualifier("masterDataSource") DataSource masterDataSource,
                                                        @Qualifier("slaveDataSource") DataSource slaveDataSource) {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put("master", masterDataSource);
        targetDataSources.put("slave", slaveDataSource);

        RoutingDataSource routingDataSource = new RoutingDataSource();
        routingDataSource.setTargetDataSources(targetDataSources);
        routingDataSource.setDefaultTargetDataSource(masterDataSource);

        return routingDataSource;
    }
}
  1. 創建一個自定義的RoutingDataSource類:
public class RoutingDataSource extends AbstractRoutingDataSource {

    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.getDataSource();
    }
}
  1. 創建一個DataSourceContextHolder類用于切換數據源:
public class DataSourceContextHolder {

    private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();

    public static void setDataSource(String dataSource) {
        contextHolder.set(dataSource);
    }

    public static String getDataSource() {
        return contextHolder.get();
    }

    public static void clearDataSource() {
        contextHolder.remove();
    }
}
  1. 在需要切換數據源的地方調用DataSourceContextHolder.setDataSource(“master”)或DataSourceContextHolder.setDataSource(“slave”)來切換數據源。

通過以上步驟,可以實現Spring Boot中的MySQL讀寫分離配置。

0
赤壁市| 枣阳市| 玛沁县| 沙河市| 潢川县| 盐山县| 富宁县| 茂名市| 长岭县| 固安县| 贵阳市| 如皋市| 峨眉山市| 营口市| 勐海县| 保德县| 长沙县| 石嘴山市| 四子王旗| 婺源县| 韶山市| 盐亭县| 延长县| 青神县| 万州区| 晋江市| 黑河市| 阿克陶县| 吴堡县| 梅河口市| 洪洞县| 海原县| 宜丰县| 博野县| 德州市| 门源| 鹤岗市| 阿鲁科尔沁旗| 凯里市| 哈尔滨市| 长葛市|