DynamicDataSource.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package org.ssssssss.magicapi.config;
  2. import org.apache.commons.lang3.StringUtils;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.jdbc.core.JdbcTemplate;
  6. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  7. import org.ssssssss.magicapi.utils.Assert;
  8. import javax.sql.DataSource;
  9. import java.util.HashMap;
  10. import java.util.Map;
  11. /**
  12. * 动态数据源
  13. */
  14. public class DynamicDataSource {
  15. private static Logger logger = LoggerFactory.getLogger(DynamicDataSource.class);
  16. private Map<String, DataSourceNode> dataSourceMap = new HashMap<>();
  17. /**
  18. * 注册默认数据源
  19. */
  20. public void put(DataSource dataSource) {
  21. put(null, dataSource);
  22. }
  23. /**
  24. * 注册数据源(可以运行时注册)
  25. *
  26. * @param dataSourceName 数据源名称
  27. */
  28. public void put(String dataSourceName, DataSource dataSource) {
  29. if (dataSourceName == null) {
  30. dataSourceName = "";
  31. }
  32. logger.info("注册数据源:{}", StringUtils.isNotBlank(dataSourceName) ? dataSourceName : "default");
  33. this.dataSourceMap.put(dataSourceName, new DataSourceNode(dataSource));
  34. }
  35. /**
  36. * 获取默认数据源
  37. * @return
  38. */
  39. public DataSourceNode getDataSource() {
  40. return getDataSource(null);
  41. }
  42. /**
  43. * 获取数据源
  44. * @param dataSourceName 数据源名称
  45. * @return
  46. */
  47. public DataSourceNode getDataSource(String dataSourceName) {
  48. if (dataSourceName == null) {
  49. dataSourceName = "";
  50. }
  51. DataSourceNode dataSourceNode = dataSourceMap.get(dataSourceName);
  52. Assert.isNotNull(dataSourceNode, String.format("找不到数据源%s", dataSourceName));
  53. return dataSourceNode;
  54. }
  55. public static class DataSourceNode {
  56. /**
  57. * 事务管理器
  58. */
  59. private DataSourceTransactionManager dataSourceTransactionManager;
  60. private JdbcTemplate jdbcTemplate;
  61. private DataSource dataSource;
  62. public DataSourceNode(DataSource dataSource) {
  63. this.dataSource = dataSource;
  64. this.dataSourceTransactionManager = new DataSourceTransactionManager(this.dataSource);
  65. this.jdbcTemplate = new JdbcTemplate(dataSource);
  66. }
  67. public JdbcTemplate getJdbcTemplate(){
  68. return this.jdbcTemplate;
  69. }
  70. public DataSourceTransactionManager getDataSourceTransactionManager() {
  71. return dataSourceTransactionManager;
  72. }
  73. }
  74. }