具有多租户的 Spring Batch

2024-03-20

我们如何定义针对多个租户运行的 Spring 批处理作业?

我已经设置为每晚针对一个数据库模式按顺序运行一系列作业。当前所有作业都从某个位置读取文件并插入到数据库。批处理配置非常基本,我在其中定义了数据源、事务管理器并将作业存储库映射到它。我的工作将指向这个存储库和事务管理器。另外,我目前正在数据库中保存批处理元数据信息。

我的新要求是能够针对多个租户运行相同的作业(按顺序执行)。每个租户的数据可以驻留在同一数据库服务器但不同的模式甚至不同的数据库服务器中。我的问题是

1)我们是否将所有租户的批次特定元数据信息存储在一个公共数据库中,还是每个租户数据库都应该有自己的数据库?

2)我的理解是,我们需要每个租户一个数据源,以便特定于该租户的作业可以访问数据库来存储从文件读取的数据。在为该租户执行作业时,Spring Batch 存储库是否也应该指向当前数据源?

3) 我们计划并行启动所有租户[作业],这意味着 JOB1 可以同时为所有租户运行。目前,我仍然不确定当这些租户运行时每个租户都与不同的数据源相关联时如何管理作业存储库、数据源、事务管理。

4)在我的脑海中,我所想的就是为每个租户复制现有的配置,并使用自己的作业存储库指向租户特定的数据源和事务管理器。如果没有其他方法可以动态定义相同的内容而无需重复,这是我要实现的最后一件事。

如果任何机构已经解决或对如何找到解决方案有任何想法,请分享。示例配置应该有所帮助。


我参与构建了一个 SaaS 应用程序,您需要在其中执行类似但不完全使用 Spring Batch 的操作。

您的主要想法是:

A。定义一个主数据库,您将在其中存储所有配置特定数据,假设您有一个映射租户名称、信息和数据源配置的表。

b.启动您的应用程序并读取此数据源,并在服务器端维护本地缓存,其中键为您的租户名称,值作为租户信息(数据源等)

C。在本地维护一个线程,例如:

public class TenantThreadLocalContext
{
    public static final ThreadLocal<TenantInformation> threadLocal = new ThreadLocal<TenantInformation>();

    public static void set(TenantInformation tenantInformation)
    {
        threadLocal.set(tenantInformation);
    }

    public static void unset()
    {
        threadLocal.remove();
    }

    public static TenantInformation get()
    {
        return threadLocal.get();
    }

}

d.每当您启动任何线程来开始处理(批处理)时,请将此线程设置为本地租户信息,以便每个线程都知道它与哪个租户关联。

e.最后在数据库处理的时候你可以看到线程有什么数据源,你可以使用这个数据源来建立连接。

如果您正在使用 Hibernate,那么您很幸运,因为 Hibernate 4 已经为您完成了这一切。参考:this http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch16.html。如果您需要休眠配置等方面的帮助,那么我可能也可以帮助您。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多租户的 Spring Batch 的相关文章

  • 如果所有类不在同一个包中,Spring @autowired 不起作用

    我有四个包裹 com spring org Files HomeController java com spring org dao Files SubscriberDao java SubscriberDaoImpl java com s
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • 在 Spring 中设置 WS https 调用超时 (HttpsUrlConnectionMessageSender)

    我正在尝试为 WS 调用设置超时 我延长了WebServiceGatewaySupport并尝试将发送者超时设置为如下 public Object marshalSendAndReceive Object requestPayload We
  • 如何在 Spring 5 MVC 中将 FilePart 转换为 byte[]

    我有从网络表单接收和上传文件的控制器方法 如何从 FilePart 中提取字节数组并将其保存到数据库 我可以通过使用 FilePart transferTo 将 FilePart 保存到文件中来完成此操作 但这看起来又慢又难看 有更好的方法
  • 将 Spring ModelAttribute 应用于所有使用特定参数类型的控制器

    在 Spring Boot REST 应用程序中 我有一个TableRequest包含表格数据 GET 请求的列排序 筛选和分页详细信息的类型 它是通用的 因为它不关心所请求的具体数据是什么 它只指定通用表参数 因此它适用于许多不同的控制器
  • Spring Oauth2. DaoAuthenticationProvider 中未设置密码编码器

    我对 Spring Oauth 和 Spring Security 很陌生 我正在尝试在我的项目中使用 client credentials 流程 现在 我设法使用自己的 CustomDetailsS ervice 来从系统中已存在的数据库
  • 更新 DynamoDB 中的多条记录

    如何在单个查询中更新 DynamoDB 中的多条记录 我有一个 csv 文件作为基于 csv 文件的输入 我必须更新数据库中的多条记录 只有一个属性 有可用的 API 吗 或者这可以使用批处理 Spring batch 来完成 Dynamo
  • 使用 Spring 验证框架验证请求标头

    是否可以将 Spring 验证框架与 Spring MVC 结合使用来验证 HTTP 请求标头的存在和值 要检查presence请求标头的 您不需要验证框架 请求标头参数默认是强制的 如果请求中缺少强制标头 Spring MVC 会自动响应
  • Google App Engine 的 Spring 框架支持

    Google App Engine 支持 Spring 框架吗 如果通过说 Google Apps 您实际上是在谈论 Google App Engine 如标签所示 那么 大部分 看 我指向缓存的页面 因为 它会在 App Engine 中
  • 启动时修改@RequestMappings

    是否可以更改 RequestMapping启动时的值 基本上我想要的是创建一个注释 Api Api Version V1 这意味着请求映射应该修改为 api dogs to api v1 dogs 我想在类级别 适用于所有 和方法级别 重新
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • 使用 Spring Boot 的 Flyway Core 给出错误 'delayedFlywayInitializer' 和 'entityManagerFactory' 之间的循环依赖关系

    我想在 SQL Server 数据库上导入一些数据 我使用的是 Spring Boot 2 3 4 我还使用 Hibernate 来生成表 我在pom中添加了flyway核心
  • Autowired spring bean 不是代理

    我正在开发一个连接到 MySQL 数据库的非常小的应用程序 我正在尝试创建表记录 但收到 没有正在进行的事务 我已经准备好了所有正确的东西 服务接口 MyService 及其实现 MyServiceImpl 我已经用 Service 注释了
  • 在spring mvc中修改请求URI

    我有一个基于 spring mvc 的应用程序 我想在请求 URI 到达控制器之前修改它 例如 控制器的 RequestMapping 是 abc xyz 但传入的请求是 abc 1 xyz 我想修改传入请求以将其映射到控制器 解决方案1
  • @Transactional 注解属于哪里?

    如果您将 Transactional in the DAO类和 或其方法 或者注释使用 DAO 对象调用的服务类是否更好 或者注释两个 层 是否有意义 我认为事务属于服务层 它是了解工作单元和用例的人 如果您将多个 DAO 注入到需要在单个
  • Tomcat下的Spring CXF Soap Web服务:找不到服务

    我正在尝试使用 CXF 和 Spring 设置一个在 Tomcat 上运行的简单 CXF Web 服务 我有一个 Web 应用程序初始化程序来引导 CXF servlet public class WebAppInitializer ext
  • Hibernate 序列乘以 50 生成“@Id”?

    private static final String SEQUENCE my seq Id GeneratedValue strategy GenerationType SEQUENCE generator SEQUENCE Sequen
  • Spring Boot 模板未解决

    我正在尝试使用 Spring Boot 和 Thymeleaf 构建一个独立的 Web 应用程序 该应用程序在 IntelliJ IDEA 中运行良好 但我无法单独运行该 jar 显然模板不包括在内 我的项目结构如下 src main ja
  • 通过Zuul上传大文件

    我在通过 zuul 上传大文件时遇到问题 我正在使用 apache commons 文件上传 https commons apache org proper commons fileupload https commons apache o
  • Spring(MVC)SQL注入避免?

    我想知道 Spring MVC 如何处理 SQL 注入 以及其他安全问题 XSS 代码 javascript 注入等 我主要讨论的是转义添加到数据库等的值 我似乎找不到任何答案 因为每次我搜索涉及依赖注入的 spring sql 注入结果时

随机推荐

  • wxWidgets的EVT_CHAR_HOOK有什么作用?

    我正在维护一个 wxWidgets C 应用程序 它使用 EVT CHAR HOOK 来捕获高级窗口中的关键事件 我找不到此事件的任何真实文档 但我可以推测它以某种优先于 标准 关键事件的方式拦截关键事件 我刚刚发现的一件令人不安的事情是
  • Angular2 使用 ngFor 绑定数组

    我使用的是 angular2 在我的表单中 我通常创建一个模型类并将我的对象与表单绑定 然后通过 this myObject 进行访问 div class form group div
  • spring data redis主从配置

    以下是我的 jedis 配置 Bean public JedisConnectionFactory getJedisConnectionFactory JedisConnectionFactory jedisConnectionFactor
  • 从包含多个文档的语料库中删除行

    我的语料库中有 4000 个文本文档 作为数据清理的一部分 我想从每个文档中删除包含特定单词的行 例如 library tm doc corpus lt VCorpus DirSource C TextMining Prototype pa
  • iOS 13中的prefersStatusBar隐藏问题

    大家好 我想隐藏我的状态栏 in a View Controller但它似乎不起作用 我使用了该功能 override var prefersStatusBarHidden Bool return true 我还设置了View contro
  • Parse Javascript SDK -- 将客户端 `user` 保存为服务器端 ` Parse.User.current()`

    我可能在概念上做错了事情 所以请告诉我我是否错了 我正在使用 Parse 的 Facebook 登录来登录用户客户端 然后我尝试发布这个user object到我的服务器 这样我就可以在服务器端拥有该用户对象 但我在文档中找不到与此相关的任
  • xcode swift 如何分割图像?

    我正在使用 Swift 2 0 我想将图像分割成多个部分 我知道这是重复的 但它们的语法很旧 我在更新时遇到问题 update Xcode 8 2 1 斯威夫特 3 0 2 您可以添加此扩展来分割图像 extension UIImage v
  • ng 升级命令将 cli 从 v7 升级到 v8 失败

    用于将 cli 版本从 v7 项目更新到 v8 的 ng Upgrade 命令失败 首先手动尝试升级 cli 也会失败 ng update angular cli 您的全局 Angular CLI 版本 8 0 1 高于您的本地版本 版本
  • sklearn RandomForestClassifier 与 auc 方法中 ROC-AUC 分数的差异

    我分别从 sklearn 的 RandomForestClassifier 和 roc curve auc 方法收到不同的 ROC AUC 分数 以下代码得到了 0 878 的 ROC AUC 即 gs best score def tra
  • 斜杠和 python cmd

    我正在尝试使用 cmd 模块来实现 python cmd 我想自动完成文件 所以我实现了一些方法 但是 我看到 complete put self text line begidx endidx 中的文本参数删除了所有 字符 任何人都知道为
  • 如何将 AsParallel 与 async 和 wait 关键字一起使用?

    我正在查看某人的异步示例代码 并注意到其实现方式存在一些问题 在查看代码时 我想知道使用并行方式循环列表是否比正常循环列表更有效 据我所知 性能上的差异非常小 两者都耗尽了每个处理器 并且完成时间都相同 这是第一种方法 var tasks
  • 启动 python windows 服务可执行文件时出错

    我正在尝试按照指示创建一个 python windows 服务 https www thepythoncorner com 2018 08 how to create a windows service in python https ww
  • 如何增加/减少 x 和 y 刻度标签的字体大小[重复]

    这个问题在这里已经有答案了 我似乎在弄清楚如何增加或减少fontsize使用时的 x 和 y 刻度标签matplotlib 我知道有set xticklabels labels fontdict None minor False kwarg
  • sqlalchemy 连接失败但 cx_oracle 成功

    我正在尝试用 Python 连接到 Oracle 服务器 我在 cx Oracle 中可以正常工作 但是当我尝试使用 sqlalchemy 连接时 它失败了 cx Oracle代码 import cx Oracle import panda
  • 我应该如何使用tiny_mce_popup.js 更新 TinyMCE 插件版本 4?

    TinyMCE4 文档目前很糟糕 我有一个与 Ruby on Rails 兼容的插入图像插件 但它依赖于已弃用的tiny mce popup js 没有关于我应该如何更新插件以规避该文件的使用的信息 TinyMCE 4 弃用旧版本file
  • 删除大文件后 git Push

    我不小心提交了 log test log 但从未推送过它 从那以后我做了一个 git rm 来摆脱它 但是当我尝试推送时 我仍然收到大量数据试图传输 git rm 不应该解决这个问题吗 如果没有 我该如何修复它 不要恢复提交然后推送 因为大
  • 使用数据库中的数据填充 IAuthSession

    因此 我根据此处的示例使用 ServiceStack 创建了一个自定义 CredentialsAuthProvider https github com ServiceStack ServiceStack wiki Authenticati
  • 通过 gganimate 制作动画条形图:view_follow 和 coord_flip 的冲突

    我想创建一个动画条形图gganim包裹 条形图的坐标应通过翻转coord flip 即水平条 和 x 轴应根据条的长度通过view follow 考虑以下示例数据 Create example data df lt data frame o
  • 错误“调用可以抛出,但未标记为‘try’并且错误未被处理”

    这段代码出现错误 调用可以抛出 但没有标记 try 并且错误不被处理 我使用的是 Xcode 7 1 最新的 beta 和 swift 2 0 func checkUserCredentials gt Bool PFUser logInWi
  • 具有多租户的 Spring Batch

    我们如何定义针对多个租户运行的 Spring 批处理作业 我已经设置为每晚针对一个数据库模式按顺序运行一系列作业 当前所有作业都从某个位置读取文件并插入到数据库 批处理配置非常基本 我在其中定义了数据源 事务管理器并将作业存储库映射到它 我