java - 以我们需要多次创建相同上下文的方式设计 Spring 应用程序是最佳实践吗?

标签 java spring design-patterns spring-integration

我将使用 Spring 框架启动一个新项目。由于我在 Spring 方面没有太多经验,我需要你的帮助来解决一些困惑。

让我们看看用例

我的应用程序使用 Spring 集成框架。我的应用程序的核心功能是,

  1. 我需要从文件系统轮询多个目录,
  2. 读取文件(主要是 csv),
  3. 对它们进行一些操作并将它们插入数据库。

目前我已经为其设置了 Spring 集成流程。其中有inbound-chaneell-adapter用于轮询,然后文件遍历 channel 并最后插入数据库。

我担心的是

  1. 应用程序应该轮询的目录数量将在运行时决定。因此我需要创建 inbound-chanell-adapter在运行时(因为一个 chanell 适配器一次只能轮询一个目录)并且无法在我的 spring context xml 中静态定义它们(因为我不知道我需要多少个目录)。

  2. 每个目录都有某些属性,应在处理时应用于文件。(在执行集成流程时)

  3. 所以现在我正在做的是加载 new ClassPathXmlApplicationContext("/applicationContext.xml");对于每个目录。并在新创建的上下文中缓存所需的属性。并在处理时使用它们(在 <int:service-activator> 中)。

当前设计的缺点

  1. 为每个目录创建单独的上下文。
  2. 不必要的 bean 会重复。 (数据库 session 工厂等)

有没有什么方法可以设计应用程序,使上下文不会重复。而且我仍然可以在整个集成流程中同时使用每个目录的属性???

提前致谢。

最佳答案

请参阅dynamic ftp sample以及其自述文件中有关在需要时创建子上下文的链接,其中包含新的入站组件。

另请参阅我对 similar question for multiple IMAP mail adapters using Java configuration 的回答然后是 follow-up question .

您还可以使用消息源建议在每次轮询中重新配置 FileReadingMessageSource 以查看不同的目录。请参阅Smart polling .

关于java - 以我们需要多次创建相同上下文的方式设计 Spring 应用程序是最佳实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37483725/

相关文章:

Spring MVC "redirect:"前缀总是重定向到 http——我如何让它保持在 https 上?

java - WebSphere : Cannot locate BeanDefinitionParser for element [default-servlet-handler]

.net - 为什么在 Dispose() 方法中隐式提交工作单元不好?

shell - help - sed - 在任何 XxxXxx 形式的字符串之间插入空格,而不替换模式

java - Hadoop错误,找不到类

c# - 从 dotnet 使用 Java Web 服务的最佳实践是什么

kotlin 中的 Spring 注入(inject)通用接口(interface)实现列表

c# - 半复杂页面上的 MVP

java - 如何捕捉在 Alfresco 的 Activiti 6 中发送电子邮件时发生的错误?

java - Android 应用程序的后端建议