DynamicDataSourceConfig.java 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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 com.alibaba.druid.pool.DruidDataSource;
  10. import com.yiidata.intergration.web.datasource.properties.DataSourceProperties;
  11. import com.yiidata.intergration.web.datasource.properties.DynamicDataSourceProperties;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.boot.context.properties.ConfigurationProperties;
  14. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  15. import org.springframework.context.annotation.Bean;
  16. import org.springframework.context.annotation.Configuration;
  17. import java.util.HashMap;
  18. import java.util.Map;
  19. /**
  20. * 配置多数据源
  21. *
  22. * @author zhenqin
  23. */
  24. @Configuration
  25. @EnableConfigurationProperties(DynamicDataSourceProperties.class)
  26. public class DynamicDataSourceConfig {
  27. @Autowired
  28. private DynamicDataSourceProperties properties;
  29. @Bean
  30. @ConfigurationProperties(prefix = "spring.datasource.druid")
  31. public DataSourceProperties dataSourceProperties() {
  32. return new DataSourceProperties();
  33. }
  34. @Bean
  35. public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) {
  36. DynamicDataSource dynamicDataSource = new DynamicDataSource();
  37. //默认数据源
  38. DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties);
  39. dynamicDataSource.setDefaultTargetDataSource(defaultDataSource);
  40. // 绑定的第三方数据源
  41. final Map<Object, Object> dynamicDataSource1 = getDynamicDataSource();
  42. dynamicDataSource.setTargetDataSources(dynamicDataSource1);
  43. dynamicDataSource1.put("default", defaultDataSource);
  44. return dynamicDataSource;
  45. }
  46. private Map<Object, Object> getDynamicDataSource(){
  47. Map<String, DataSourceProperties> dataSourcePropertiesMap = properties.getDatasource();
  48. Map<Object, Object> targetDataSources = new HashMap<>(dataSourcePropertiesMap.size() + 1);
  49. dataSourcePropertiesMap.forEach((name, ds) -> {
  50. DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(ds);
  51. targetDataSources.put(name, druidDataSource);
  52. });
  53. return targetDataSources;
  54. }
  55. }