是否可以在不重新启动整个Liferay门户的情况下反映portal-ext.properties中的更改?

时间:2012-08-13 09:21:13

标签: configuration properties liferay

我的问题是每次更改Liferay portal-properties后(特别是在新的门户项目开始时这种情况经常发生)我需要重新启动整个门户网站。

我可以通过挂钩设置一些属性,这些值将在重新部署后更改。此外,必须可以在运行时更改大多数门户网站属性。

但是,您是否知道某种方法可以反映portal-ext.properties中的更改而无需重新启动Liferay门户网站?

6 个答案:

答案 0 :(得分:5)

stoldark所述,在生产环境中根本不可能。由于portal.properties的属性是在门户启动时加载的。

但是对于开发,您可以使用JRebel之类的工具,配置一些步骤here。使用此工具可以获得的唯一问题是付费; - )

答案 1 :(得分:1)

Liferay论坛也提到过这个问题:

https://www.liferay.com/community/forums/-/message_boards/message/800954

但我担心大多数属性只在门户启动期间读取一次。 通常,在这种情况下使用属性文件有这个缺点。

Liferay甚至还有一个问题,但尚未解决:

http://issues.liferay.com/browse/LEP-5579

答案 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中的一个功能。

所以我会使用我喜欢的旧技巧:

  1. 将自定义属性放在(liferay-tomcat-home)/conf/filename.properties
  2. 随时按

    重新加载
    Properties customProperties = new Properties();
    customProperties.load(new FileInputStream(new File(System.getProperty("catalina.base"), "conf/filename.properties")));
    
  3. 我必须承认我没有在Liferay-Portlet-Environment中尝试过这个,但是这个系统属性(“catalina.base”)应该在这种情况下可用,至少使用一些Liferay-Helper-Class。 / p>

答案 5 :(得分:0)

一些Liferay类在初始化静态字段常量时会读取其属性。例如:

public static final boolean ENABLED = GetterUtil.getBoolean(
    PropsUtil.get(DynamicCSSFilter.class.getName()));

基本上,可以重新加载属性(例如,通过控制面板中的脚本),但是所有这些静态常量都将保留。