DynamicContextHolder.java 1017 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package com.sqx.datasource.config;
  2. import java.util.ArrayDeque;
  3. import java.util.Deque;
  4. /**
  5. * 多数据源上下文
  6. */
  7. public class DynamicContextHolder {
  8. @SuppressWarnings("unchecked")
  9. private static final ThreadLocal<Deque<String>> CONTEXT_HOLDER = new ThreadLocal() {
  10. @Override
  11. protected Object initialValue() {
  12. return new ArrayDeque();
  13. }
  14. };
  15. /**
  16. * 获得当前线程数据源
  17. *
  18. * @return 数据源名称
  19. */
  20. public static String peek() {
  21. return CONTEXT_HOLDER.get().peek();
  22. }
  23. /**
  24. * 设置当前线程数据源
  25. *
  26. * @param dataSource 数据源名称
  27. */
  28. public static void push(String dataSource) {
  29. CONTEXT_HOLDER.get().push(dataSource);
  30. }
  31. /**
  32. * 清空当前线程数据源
  33. */
  34. public static void poll() {
  35. Deque<String> deque = CONTEXT_HOLDER.get();
  36. deque.poll();
  37. if (deque.isEmpty()) {
  38. CONTEXT_HOLDER.remove();
  39. }
  40. }
  41. }