package com.farriver.bwf.service.config.database; import com.farriver.bwf.common.options.DBTypeOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.atomic.AtomicInteger; public class DBContextHolder { private static final Logger logger = LoggerFactory.getLogger(DBContextHolder.class); private static final ThreadLocal contextHolder = new ThreadLocal<>(); private static final AtomicInteger counter = new AtomicInteger(-1); public static void set(DBTypeOption dbType) { contextHolder.set(dbType); } public static DBTypeOption get() { return contextHolder.get(); } public static void master() { set(DBTypeOption.MASTER); logger.debug("切换到master主数据库..."); } public static void slave() { // 轮询 int index = counter.getAndIncrement() % 2; if (counter.get() > 9999) { counter.set(-1); } switch (index) { case 0: set(DBTypeOption.SLAVE1); logger.debug("切换到slave1读数据库..."); break; case 1: set(DBTypeOption.SLAVE2); logger.debug("切换到slave2读数据库..."); break; default: set(DBTypeOption.MASTER); logger.debug("切换到master主数据库..."); break; } } }