| | |
| | | package com.iailab.framework.tenant.core.service; |
| | | |
| | | import com.baomidou.dynamic.datasource.creator.DataSourceProperty; |
| | | import com.iailab.framework.common.pojo.CommonResult; |
| | | import com.iailab.framework.common.util.cache.CacheUtils; |
| | | import com.iailab.module.system.api.tenant.TenantApi; |
| | | import com.google.common.cache.CacheLoader; |
| | | import com.google.common.cache.LoadingCache; |
| | | |
| | | import com.iailab.module.system.api.tenant.dto.TenantDataSourceConfigRespDTO; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.SneakyThrows; |
| | | |
| | |
| | | |
| | | }); |
| | | |
| | | /** |
| | | * 针对 {@link #getDataSourceProperty(Long)} 的缓存 |
| | | */ |
| | | private final LoadingCache<Long, DataSourceProperty> dataSourcePropertyCache = CacheUtils.buildAsyncReloadingCache( |
| | | Duration.ofMinutes(1L), // 过期时间 1 分钟 |
| | | new CacheLoader<Long, DataSourceProperty>() { |
| | | |
| | | @Override |
| | | public DataSourceProperty load(Long id) { |
| | | // 获得租户对应的数据源配置 |
| | | TenantDataSourceConfigRespDTO dataSourceConfig = tenantApi.getTenantDataSourceConfig(id); |
| | | if (dataSourceConfig == null) { |
| | | return null; |
| | | } |
| | | // 转换成 dynamic-datasource 配置 |
| | | // return new DataSourceProperty() |
| | | // .setPoolName(dataSourceConfig.getName()).setUrl(dataSourceConfig.getUrl()) |
| | | // .setUsername(dataSourceConfig.getUsername()).setPassword(dataSourceConfig.getPassword()); |
| | | |
| | | DataSourceProperty ds = new DataSourceProperty(); |
| | | ds.setPoolName(dataSourceConfig.getName()); |
| | | ds.setUrl(dataSourceConfig.getUrl()); |
| | | ds.setUsername(dataSourceConfig.getUsername()); |
| | | ds.setPassword(dataSourceConfig.getPassword()); |
| | | return ds; |
| | | } |
| | | |
| | | }); |
| | | |
| | | @Override |
| | | @SneakyThrows |
| | | public List<Long> getTenantIds() { |
| | |
| | | validTenantCache.get(id).checkError(); |
| | | } |
| | | |
| | | @Override |
| | | @SneakyThrows |
| | | public DataSourceProperty getDataSourceProperty(Long id) { |
| | | return dataSourcePropertyCache.get(id); |
| | | } |
| | | } |