package org.dayatang.datasource4saas.dsregistry; import org.dayatang.utils.Assert; import org.dayatang.utils.Slf4JLogger; import javax.sql.DataSource; import java.util.Date; /** * 当还没有对应于指定的租户的数据源时,即时创建一个。 * @author yyang (<a href="mailto:gdyangyu@gmail.com">gdyangyu@gmail.com</a>) * */ public class JdbcDataSourceRegistry extends MapBasedDataSourceRegistry { private static final Slf4JLogger LOGGER = Slf4JLogger.getLogger(JdbcDataSourceRegistry.class); private DataSourceCreator dataSourceCreator; public DataSourceCreator getDataSourceCreator() { Assert.notNull(dataSourceCreator, "Data Source Creator is null!"); return dataSourceCreator; } public void setDataSourceCreator(DataSourceCreator dataSourceCreator) { this.dataSourceCreator = dataSourceCreator; } public JdbcDataSourceRegistry(DataSourceCreator dataSourceCreator) { this.dataSourceCreator = dataSourceCreator; } @Override protected DataSource findOrCreateDataSourceForTenant(String tenant) { Assert.notBlank(tenant, "Tenant is null or blank!"); DataSource result = getDataSourceCreator().createDataSourceForTenant(tenant); Date now = new Date(); recordLastAccessTimeOfTenant(tenant, now); LOGGER.debug("Create data source for tenant '{}' at {}", tenant, now); return result; } }