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

时间:2016-05-27 12:34:07

标签: java spring design-patterns spring-integration

我将使用Spring框架开始一个新项目。因为我在Spring没有太多经验,所以我需要你的帮助来解决一些困惑。

让我们看看用例

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

  1. 我需要从文件系统中轮询多个目录,
  2. 阅读文件(主要是csv),
  3. 对它们进行一些操作并将它们插入数据库。
  4. 目前我已经为它设置了弹簧集成流程。其中inbound-chaneell-adapter用于轮询,然后通过通道进行文件遍历,最后插入到数据库中。

    我关注的是

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

    2. 每个目录都有一些属性,应该在处理时应用于文件。(在完成整合流程时)

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

    4. 当前设计的缺点

      1. 为每个目录创建单独的上下文。
      2. 重复不必要的bean。 (数据库会话工厂等)
      3. 那么有没有办法以不会复制上下文的方式设计应用程序。而且我仍然可以在整个集成流程中同时使用每个目录的属性???

        提前致谢。

1 个答案:

答案 0 :(得分:3)

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

另请参阅我对similar question for multiple IMAP mail adapters using Java configurationfollow-up question的回答。

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

相关问题