欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

Java 实践:Spring Boot 实现多租户理念

最编程 2024-06-03 20:19:53
...
@Configuration public class DataSourceConfig { @Bean @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSourceProperties dataSourceProperties() { return new DataSourceProperties(); } @Bean @Primary public DataSource dataSource(DataSourceProperties properties, @Qualifier("multiTenantRoutingDataSource") DataSource multiTenantDataSource) { HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); if (multiTenantDataSource instanceof HikariDataSource) { ((HikariDataSource) dataSource).addHealthCheckRegistry(((HikariDataSource) multiTenantDataSource).getHealthCheckRegistry()); } return dataSource; } @Bean public DataSource multiTenantRoutingDataSource(DataSource defaultDataSource) { Map<Object, Object> targetDataSources = new ConcurrentHashMap<>(); DynamicRoutingDataSource dataSource = new DynamicRoutingDataSource(); dataSource.setDefaultTargetDataSource(defaultDataSource); dataSource.setTargetDataSources(targetDataSources); dataSource.afterPropertiesSet(); return dataSource; } // 添加租户数据源 public void addTenantDataSource(String tenantId, DataSource dataSource) { ((DynamicRoutingDataSource) multiTenantRoutingDataSource).addDataSource(tenantId, dataSource); } // 租户数据源切换AOP @Aspect @Component public class TenantDataSourceAspect { @Before("@annotation(com.example.annotation.ChangeTenant)") public void changeDataSource(JoinPoint joinPoint, ChangeTenant annotation) { // 获取当前租户ID并切换数据源 } } }