【问题标题】:How to configure Liferay using Consul如何使用 Consul 配置 Liferay
【发布时间】:2016-11-21 14:55:22
【问题描述】:

我们在我们的应用程序中使用 Liferay 6.2 Portal。 我们想用来自 Consul 的值更新 portal-ext.properties 中的属性。 例如,我们想使用来自 Consul 的值设置属性 virtual.hosts.valid.hosts。 我们要避免的一种选择是使用 Consul-template 并使用 bash 脚本更新文件。

是否有一种编程方式来更新 Liferay 中的属性? (例如来自钩子)

【问题讨论】:

    标签: liferay liferay-6 consul


    【解决方案1】:

    您可以使用conf.d。它基本上是一个 tilny 配置管理器,可以从 etcd 或 consul 获取配置并将其写入本地文件。 我已经使用它来配置 Liferay 实例的 Kubernetes 集群。我没有独立的示例,但 here is 创建 conf.d 配置文件的代码(来自 CoseOS 的云配置)。

    【讨论】:

    • 我希望避免对文件系统进行任何更改。如果无法以编程方式更改 Liferay 属性,我们可以使用 bash 脚本更改它们——但这是我们想要避免的。
    • 以编程方式执行此操作是可能的,但很复杂。您必须替换/扩展 Liferay 才能直接从领事加载属性(查找 ConfigurationFactory 和 ConfigurationFactoryImpl)
    • 你的意思是我需要提供我自己的 ConfigurationFactoryImpl 实现并在类路径中替换 Liferay 的类吗?
    • 另请注意,您必须实现通知机制以在属性更改时触发重启。这听起来很容易,但一旦你尝试,你会很快遇到一些边缘情况。同样的事情也适用于 shell 脚本,因为这就是我决定使用 conf.d 的原因
    • 有几种方法可以解决它,但几乎可以肯定你最终会覆盖/替换类。 Liferay 为此提供了 EXT,因此您不必从源代码重新编译整个门户。也就是说,我自己并没有尝试过做这样的事情,所以我不保证它会起作用。仅根据我的知识,我认为它应该是可行的,但相当复杂。
    【解决方案2】:

    某些属性可以通过挂钩动态更新。您可以在 liferay-hook.xml 的 dtd 中找到它们。只需创建一个挂钩并查找 dtd url(我目前正在使用手机,无法很好地访问此类 url 的资源)

    【讨论】:

    • 谢谢,但 DTD 声明它只允许更改特定的属性集,而我需要的属性不在列表中。此外,我需要将 REST 请求发送到外部服务(来自 Java 代码)以获得所需的值。
    • 对于 dtd 中未列出的所有属性,您需要重新启动应用服务器或自行实施更新。这可能是可能的,但只是没有实施。我怀疑非动态属性没有api来改变它们
    • 重启没问题。我只是想避免更改文件系统中的任何内容来配置 Liferay,因此我需要一种在 Liferay 启动期间更改某些属性值的方法。
    • "Some" 是这里的关键字。对于某些属性,它会很容易,对于某些属性则不会。遵循 Milen 的想法,但是我不知道当您不写入文件系统时您会承担什么商业价值。事实上,我不会担心。您可以通过单独的领事专有属性文件进行配置 - 我猜比您的计划更容易
    【解决方案3】:

    由于没有简单的编程方式以编程方式配置 Liferay 属性,我们决定修改启动 sh 脚本以从 Consul 读取数据并更新我们自定义的 portal-ext.properties 中的配置

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多