我将使用 Spring 框架启动一个新项目。由于我在 Spring 方面没有太多经验,我需要你的帮助来解决一些困惑。
让我们看看用例
我的应用程序使用 Spring 集成框架。我的应用程序的核心功能是,
- 我需要从文件系统轮询多个目录,
- 读取文件(主要是 csv),
- 对它们进行一些操作并将它们插入数据库。
目前我已经为其设置了 Spring 集成流程。其中有inbound-chaneell-adapter
用于轮询,然后文件遍历 channel 并最后插入数据库。
我担心的是
应用程序应该轮询的目录数量将在运行时决定。因此我需要创建
inbound-chanell-adapter
在运行时(因为一个 chanell 适配器一次只能轮询一个目录)并且无法在我的 spring context xml 中静态定义它们(因为我不知道我需要多少个目录)。每个目录都有某些属性,应在处理时应用于文件。(在执行集成流程时)
所以现在我正在做的是加载
new ClassPathXmlApplicationContext("/applicationContext.xml");
对于每个目录。并在新创建的上下文中缓存所需的属性。并在处理时使用它们(在<int:service-activator>
中)。
当前设计的缺点
- 为每个目录创建单独的上下文。
- 不必要的 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/