我有一个带有控制器的Spring portlet,其结构如下所示。
@Controller
@RequestMapping("VIEW")
public class MyController {
@RenderMapping
public String defaultView() {
// some scheduling code
return "view";
}
}
这是my previous question的变体,我没有得到任何答案。
我们有时会重启此服务器。我们希望避免外部人员介入再次手动进行调度。由于它当前是一个portlet,因此需要呈现视图以便执行此代码。有没有办法在liferay服务器启动后立即自动执行此调度代码?
答案 0 :(得分:2)
应用程序启动事件。
该事件由自定义操作处理。样品:
public class MyAction extends SimpleAction {
@Override
public void run(String[] companyIds) throws ActionException {
// run, run
}
}
该操作通常包含在一个钩子插件中。钩子插件可以作为单独的应用程序部署(即单独的.war文件),但它也可以是portlet应用程序的一部分。
要实现钩子,您需要:
1)在自定义属性文件中注册操作 - 让我们说portal-hooked.properties
(对于Maven项目,文件将位于src/main/resources
):
#
# Application startup event that runs once for every web site instance of
# the portal that initializes.
#
application.startup.events=com.test.MyAction
2)在liferay-hook.xml
文件夹中创建钩子描述符 - WEB-INF
(可以与portlet描述符并排放置,即portlet.xml
和liferay-portlet.xml
):
<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.1.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_1_0.dtd">
<hook>
<portal-properties>portal-hooked.properties</portal-properties>
</hook>