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 配置扩展 AbstractConfiguration
。 getProperty
方法使用另一个名为 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
...
如您所见,设置需要添加前缀和转义才能用作环境变量。
希望这对你有用。
我想知道在 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 配置扩展 AbstractConfiguration
。 getProperty
方法使用另一个名为 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
...
如您所见,设置需要添加前缀和转义才能用作环境变量。
希望这对你有用。