Hybris 中的环境变量 local.properties

Environment Variables in Hybris local.properties

我想知道在 Hybris 属性文件中是否有引用环境变量的方法。

例如,在 local.properties 中: my.property = ${MY_ENVIRONMENT_VARIABLE}

我的搜索得出结论,这在 Spring 中是可行的,但在 Hybris 中似乎不起作用。

如有任何想法,我们将不胜感激。

我发现这与您在 Hybris Experts 上的问题有关。希望对你有帮助。

无法访问 local.properties 文件中的 shell 环境变量。作为解决方法,您可以在启动平台之前执行 echo "my.property = $MY_ENVIRONMENT_VARIABLE" >> local.properties

不,这不可能。

实际上 hybris 使用 org.apache.commons.configuration 包。在 documentation 你会发现可以使用环境变量。

user.file = ${sys:user.home}/settings.xml
action.key = ${const:java.awt.event.KeyEvent.VK_CANCEL}
java.home = ${env:JAVA_HOME}

不幸的是,hybris 做了一些我无法解释的事情,他们过度使用了默认实现并删除了所有插值功能。

如果我们进一步分析问题,使用的配置 class 称为 HybrisConfiguration。此 class 从 Apache Commons 配置扩展 AbstractConfigurationgetProperty 方法使用另一个名为 ConfigIntf 的接口。在 class AbstractConfig 中可以找到实现。每个getString getInteger,等等...方法都被覆盖了。

例如,对于 String,该方法不会调用 interpolate 方法,而是您会发现一个非常简单的...

StringUtils.isEmpty(value) ? def : value;

因此,如果您想使用 Apache API 的所有功能,请尝试替换 hybris 实现...但是我认为如果不修改平台就不会那么容易做到这一点,因为我看不到任何可以注入的 bean。

可以在 hybris 中访问环境变量。我公司的一位合作伙伴在 hybris 文档中发现了这一点:

平台允许您将属性也指定为环境变量

# security: make the platform *abort startup* if no one overrides the settings below
db.url=<CHANGE_ME>
db.username=<CHANGE_ME>
db.password=<CHANGE_ME>
# security: end

特殊的 属性 值已针对管理员希望确保的此类用例引入:a) 文件不包含合理的设置,以及 b) 如果这些设置,系统不会启动没有被覆盖。

在服务器上,这些设置将在启动平台之前作为环境变量公开:

 foo$ export y_db_url=jdbc:mysql://my.secret-db-host.com/AlfavaMetraxis?useConfigs=maxPerformance&characterEncoding=utf8
 foo$ export y_db_username=Amy
 foo$ export y_db_password=Rory
 foo$ ./hybrisserver.sh start
...

如您所见,设置需要添加前缀和转义才能用作环境变量。

https://help.sap.com/viewer/a74589c3a81a4a95bf51d87258c0ab15/1905/en-US/8b8e13c9866910149d40b151a9196543.html?q=CHANGE_ME

希望这对你有用。