spring - 我们如何在 Spring 调度程序中实现 Multi-Tenancy 选项?

标签 spring spring-mvc spring-boot

我们在我们的应用程序中实现了 Multi-Tenancy 选项。每个租户都有各自独立的数据库。使用应用程序过滤器,我可以根据请求管理或分配每个租户。同样,我们如何在 spring boot 调度程序中做到这一点?

@component     
public class scheduler{
    @Scheduled(fixedRate = 5000)
        public void reminderEmail() {
    //how can we fetch the exact data from exact tenant DB?
    //since there is no request how can we get the tenant name for 
     fetching exact tenant db?    
    }
}

请让我知道我们怎样才能做到这一点?

最佳答案

类似于:

...
public class TenantContext {

    private static final ThreadLocal<String> CONTEXT = new ThreadLocal<>();

    public static void setTenantId(String tenantId) {     
        CONTEXT.set(tenantId);
    }

    public static String getTenantId() {
        return CONTEXT.get();
    }
...
}

然后您的 Filter 或 Spring MVC 拦截器可以在链接请求之前执行此操作:

String tenantId = request.getHeader(TENANT_HEADER_NAME);
TenantContext.setTenantId(tenantId);

并在回来的路上重置它:

TenantContext.setTenantId(null);

要在与 http 请求无关的线程中使用它,您可以这样做:

TenantContext.setTenantId("tenant_1");

更多信息可以在我的博文中找到 Multi-tenant applications using Spring Boot, JPA, Hibernate and Postgres

关于spring - 我们如何在 Spring 调度程序中实现 Multi-Tenancy 选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44521035/

相关文章:

java - Spring Boot 应用程序在启动时终止

java - Spring AOP 阻止 RestController

java - 使用 postgres 的时区将日期转换为时间戳

java - 测试 spring hibernate dao 和服务层

spring-boot - 如何通过 SpringBootTest 调试 Spring Boot 应用程序

java - Spring Boot Autowiring 服务 java.lang.NullPointerException

java - Hibernate validator 导致多对多关系无法保存

java - Spring DeferredImportSelector 在任何配置之前运行

java - 使用 spring mvc 将 url 模式重定向到特定 Controller

Java 配置中忽略 Spring MVC HandlerInterceptor