DynamicContextHolder.java 1.1 KB

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