我创建了一个Liferay 7模块,它运行良好。
问题:在 Java 源代码中,我硬编码了管理员需要修改的内容。
问题:Liferay将设置外部化的方式是什么?我不介意服务器是否必须重新启动,但当然,修改实时运行的服务器上的设置(通过Gogo Shell?(的能力可能会很酷,前提是这些设置在服务器重新启动后幸存下来。
更具体地说,我有一个模块,我希望能够为其配置看起来像"3g9828hf928rf98"
的 API 密钥,以及另一个模块,我想为其配置一个看起来像"BASIC-WEB-CONTENT","EVENTS","INVENTORY"
的允许结构列表。
Liferay正在使用标准的OSGi配置。在这里记录它是一项艰巨的任务,但它在文档中得到了很好的阐述。
总之:
@Meta.OCD(id = "com.foo.bar.MyAppConfiguration")
public interface MyAppConfiguration {
@Meta.AD(
deflt = "blue",
required = false
)
public String favoriteColor();
@Meta.AD(
deflt = "red|green|blue",
required = false
)
public String[] validLanguages();
@Meta.AD(required = false)
public int itemsPerPage();
}
OCD
代表 ObjectClassDefinition。它通过 id/pid 将此配置类/对象绑定到可配置对象。
AD
用于 AttributeDefinition,并为配置接口提供了一些提示,该接口是在此元类型的帮助下自动生成的。
当您不喜欢自动生成的UI的外观时,您"只需"为屏幕上看到的标签添加本地化键(标准Liferay翻译(。
你会发现更多关于OSGi配置的细节,例如在途中,尽管我发现的例子总是比仅仅追求配置要复杂一些。