我的问题是每次更改Liferay portal-properties
后(特别是在新的门户项目开始时这种情况经常发生)我需要重新启动整个门户网站。
我可以通过挂钩设置一些属性,这些值将在重新部署后更改。此外,必须可以在运行时更改大多数门户网站属性。
但是,您是否知道某种方法可以反映portal-ext.properties
中的更改而无需重新启动Liferay门户网站?
答案 0 :(得分:5)
如stoldark所述,在生产环境中根本不可能。由于portal.properties
的属性是在门户启动时加载的。
答案 1 :(得分:1)
Liferay论坛也提到过这个问题:
https://www.liferay.com/community/forums/-/message_boards/message/800954
但我担心大多数属性只在门户启动期间读取一次。 通常,在这种情况下使用属性文件有这个缺点。
Liferay甚至还有一个问题,但尚未解决:
答案 2 :(得分:1)
我知道这是一个非常古老的主题,但对于正在寻找某种工作方式的人可能会有所帮助
众所周知,没有直接的方法,但是我通过使用Java反射和类加载器来做到这一点。
Liferay版本:6.x
//Loading the PropsUtil class by using PortalClassLoader
Class<?> prospsUtilClass = PortalClassLoaderUtil.getClassLoader().loadClass("com.liferay.portal.util.PropsUtil");
//getting the reload method of PropsUtil class
Method reloadMethod = prospsUtilClass.getMethod("reload", null);
//Invoking the static reload method
reloadMethod.invoke(null, null);
重新加载方法将Portal-ext属性重新加载到门户,以便我们可以使用新属性而无需重新启动Liferay服务器。
答案 3 :(得分:0)
如果创建一个钩子来覆盖门户网站属性,那么只需部署钩子就可以更改属性,而无需重新启动Portal。
请注意,您无法使用挂钩修改所有属性。有关您可以修改的列表,请查看:https://docs.liferay.com/portal/6.2/definitions/。
答案 4 :(得分:0)
我刚刚搜索了重新加载portal-ext.properties并在此处登陆。 好的 - 不是Liferay中的一个功能。
所以我会使用我喜欢的旧技巧:
随时按
重新加载Properties customProperties = new Properties();
customProperties.load(new FileInputStream(new File(System.getProperty("catalina.base"), "conf/filename.properties")));
我必须承认我没有在Liferay-Portlet-Environment中尝试过这个,但是这个系统属性(“catalina.base”)应该在这种情况下可用,至少使用一些Liferay-Helper-Class。 / p>
答案 5 :(得分:0)
一些Liferay类在初始化静态字段常量时会读取其属性。例如:
public static final boolean ENABLED = GetterUtil.getBoolean(
PropsUtil.get(DynamicCSSFilter.class.getName()));
基本上,可以重新加载属性(例如,通过控制面板中的脚本),但是所有这些静态常量都将保留。