在 Web 应用程序和批处理应用程序之间共享代码库的好方法是什么?
What is a good approach to share a code base between a webapp and batch applications?
我正在开发一个相当大范围的 Java 网络应用程序。
它有许多模块,使用许多外部库来做事,并与一组独立的批处理应用程序(cron 作业)紧密合作,这些应用程序生成 PDF、发票、批处理日志文件,定期 FTP 上传给合作伙伴基础和所有类似的东西。
我的代码库分为
- Web/Batch层
- 业务层
- 普通模型层
- DAO层
第一层包含两个包.web
和.batch
。第一个包含所有与 servlet 相关的内容,后者包含所有具有 main(String[] args)
方法的批处理程序。这两个世界都使用公共层和业务层来完成他们的工作,通常甚至是相同的方法(例如 loadUser()
、storeUser()
等)
现在我有一个宽泛的问题:
什么是合适的部署策略?
考虑到我想将我的 webapp 部署为 .war 存档,并且批处理程序应该可以从 UNIX cron
.
调用
还有一个非常具体的:
如何从业务层加载资源?
在考虑 webapp 时,我会在 WEB-INF
目录中存储配置文件,例如 Apache FOP 配置文件和 .xsl
用于生成发票 PDF 等的转换文件,可能有些子目录,还是在 .war
文件 META-INF
中?
但是在业务层,需要这些东西的地方,(比如服务方法generateInvoicePDF(transaction)
),我不能用servletContext去抢资源。在批处理程序中,甚至没有 servletContext 和 WEB-INF
目录!
你们是怎么做到的? web层真的只需要resources吗?还是将所有这些文件放入类路径根目录并使用 ClassLoader.getResource()
?我最终会在那里得到一些各种各样的文件。不喜欢那样。或者仅将类路径根目录中的配置文件和 .xsl
放入文件系统中的某个外部硬编码文件夹中(不是很便携)?
来自其他项目的任何指导和经验将不胜感激。
如果你有业务层需要的资源,把它们放在业务层jar中。
不要访问您的 Web 层(通过 ServletContext)来检索内层中的内容。
参见:How to package resources, that are accessed directly , into a jar file
我正在开发一个相当大范围的 Java 网络应用程序。 它有许多模块,使用许多外部库来做事,并与一组独立的批处理应用程序(cron 作业)紧密合作,这些应用程序生成 PDF、发票、批处理日志文件,定期 FTP 上传给合作伙伴基础和所有类似的东西。
我的代码库分为
- Web/Batch层
- 业务层
- 普通模型层
- DAO层
第一层包含两个包.web
和.batch
。第一个包含所有与 servlet 相关的内容,后者包含所有具有 main(String[] args)
方法的批处理程序。这两个世界都使用公共层和业务层来完成他们的工作,通常甚至是相同的方法(例如 loadUser()
、storeUser()
等)
现在我有一个宽泛的问题:
什么是合适的部署策略?
考虑到我想将我的 webapp 部署为 .war 存档,并且批处理程序应该可以从 UNIX cron
.
还有一个非常具体的:
如何从业务层加载资源?
在考虑 webapp 时,我会在 WEB-INF
目录中存储配置文件,例如 Apache FOP 配置文件和 .xsl
用于生成发票 PDF 等的转换文件,可能有些子目录,还是在 .war
文件 META-INF
中?
但是在业务层,需要这些东西的地方,(比如服务方法generateInvoicePDF(transaction)
),我不能用servletContext去抢资源。在批处理程序中,甚至没有 servletContext 和 WEB-INF
目录!
你们是怎么做到的? web层真的只需要resources吗?还是将所有这些文件放入类路径根目录并使用 ClassLoader.getResource()
?我最终会在那里得到一些各种各样的文件。不喜欢那样。或者仅将类路径根目录中的配置文件和 .xsl
放入文件系统中的某个外部硬编码文件夹中(不是很便携)?
来自其他项目的任何指导和经验将不胜感激。
如果你有业务层需要的资源,把它们放在业务层jar中。
不要访问您的 Web 层(通过 ServletContext)来检索内层中的内容。
参见:How to package resources, that are accessed directly , into a jar file