2017-06-13 22 views
0

我们在我们的应用程序中实现了多租户选项。每个租户都有独立的数据库。使用应用程序过滤器我可以管理或分配请求中的每个租户。我们在春季启动计划程序中该如何做呢?我们如何在Spring调度器中实现多租户选项?

@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?  
    } 
} 

请让我知道我们该怎么做到这一点?

+0

如果每个租户有一个单独的数据库中找到,不能你在说你每个租户所需要的数据库表? (nitpick:你在问题标题中有一个错字。) –

回答

0

喜欢的东西:

... 
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(); 
    } 
... 
} 

那么你的过滤器或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

+0

谢谢ootero,这是我们如何实施的。如何在调度器方法中实现。 –

+0

这取决于你想在计划任务中做什么,处理一个或所有租户?如果你想处理一个租户,你知道哪个租户? – ootero

相关问题