我想测试一个应用程序并决定使用环境变量将配置参数传递给我的erlang应用程序。
目前我正在使用-define(PARAMETER1, os:getenv("PARAMETER1")).
但是,使用此实现,每次调用都会读取变量(我不确定此调用的性能)。
有没有办法在启动应用程序时只读取一次环境变量?
答案 0 :(得分:2)
define
是一个宏,因此每次使用宏时,宏中的内容都将放在实际代码中。您只需要在函数中调用os:getenv/1
一次,将其存储在状态中并将其传递给需要该环境变量for example的主管和其他模块:
start(_StartType, _StartArgs) ->
case get_cfg() of
{error, _} = Err -> Err;
Cfg -> start_sup(Cfg)
end.
get_cfg() ->
try
hbd_cfg:setup()
catch
throw:Term -> {error, Term}
end.
start_sup(Cfg) ->
case hbd_sup:start_link(Cfg) of
{ok, Pid} ->
hbd_event_logger:add_handler(),
{ok, Pid};
Other ->
{error, Other}
end.
在此示例中,配置在get_cfg/0
中读取一次,然后传递给主管,主管将其传递给受监管的工作人员。