我们已经在我们的应用程序中实现了多租户选项。每个租户都有各自独立的数据库。使用应用程序过滤器,我可以从请求中管理或分配每个租户。同样,我们如何在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?
}
}
请告诉我我们如何才能做到这一点?
3条答案
按热度按时间kiz8lqtg1#
类似于:
那么您的Filter或SpringMVC拦截器就可以在链接请求之前执行此操作:
并在回来的路上重置它:
要在一个与http请求无关的线程中使用它,只需执行以下操作:
更多信息请参见我的博客文章Multi-tenant applications using Spring Boot, JPA, Hibernate and Postgres
ftf50wuq2#
如果您使用的多租户设置与此链接中的设置类似:https://www.ricston.com/blog/multitenancy-jpa-spring-hibernate-part-1/和/或您具有默认租户。实现此目的最简单的方法是向CurrentTenantIdentifierResolverImpl类添加一个静态方法,该方法可更改没有会话的异步任务的默认租户。这是因为计划任务将始终使用默认租户。
当前租户标识符解析器实现java
计划任务.java
然后在计划任务完成后再改回来。这就是我们如何完成它的,它符合我们的需要。
mitkmikd3#
如果您使用请求来确定哪个承租人当前处于活动状态,并使用承租人来确定数据库连接,则不可能从计划任务执行任何涉及数据库的操作,因为计划任务没有承租人ID