我有一个rest端点,可以启动将XML加载到内存的调度程序。每当我点击该休息端点时,它会将XML加载到内存中,并在准备就绪后返回XML(需要10-15秒)。再次访问同一端点时,它将返回缓存的XML。一切正常,但是现在我必须手动命中端点以启动调度程序。有没有办法在启动时通过简单的代码自动命中端点?或者还有其他解决方案吗?
答案 0 :(得分:0)
通常,Nucleus中的组件在首次访问时实例化,而不是在系统启动时实例化。
在ATG启动时完成任何工作的方法是创建组件,然后将其核心路径添加到/ Initial组件中的初始服务列表中(或者从其他许多组件中{{1组件改变了它)
组件应该是全局范围的。因为/ Initial在启动时被实例化,所以它引用的服务也将被实例化为依赖项。
如果您的组件是POJO,那么将在组件启动时调用无参数构造函数,然后将为每个属性调用Initial
方法,并在其属性文件中定义值。
如果您的组件是从通用服务扩展的,那么另外,将调用setX
和beforeSet
方法,在调用set方法之前和之后,如果它们存在,最后{{1}将被调用。
这是Nucleus管理的组件的基本生命周期的所有部分。
这为您提供了许多用于调用自定义代码的挂钩。
现在,在您的问题中,您询问如何在启动时调用REST端点。但是,我相信您真正想要问的是如何确保在系统启动时执行特定的代码。 REST端点是您今天从Nucleus外部手动触发它的方式。但这并不意味着如果要在启动时自动调用它,它必须调用REST端点。
实现目标的最简单方法是
afterSet
doStartUp
方法GenericService
属性重新启动服务器并检查启动时是否正在调用您的代码。放入一些调试语句,并在您的层中切换调试日志记录。
注意,您实际上也可能想要考虑是否确实需要在系统启动时调用代码。初始服务中的任何内容都会增加服务器的开始时间。根据您的要求,最好在首次访问应用程序服务时执行此操作,而不是在服务器启动时执行此操作。