在erlang中基于配置参数启动依赖项



我的一些应用程序依赖项仅在给定参数设置时使用。我需要知道启动这些依赖项的最佳方法是什么。我正在使用Erlang R14B04,我不能使用其他版本。

我有两个选择。第一个:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp),
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.
start(Type, StartArgs) ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

第二个备选项:

%% file myapp.erl
start() ->
    dep1:start(),
    dep2:start(),
    application:start(myapp).
start(Type, StartArgs) ->
    case application:get_env(myapp, use_app3) ->
        true ->
            dep3:start()
        _ ->
            ok
    end.
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).
哪一个是解决这个问题的最好方法?

我认为第一个是更好的选择。Start/0似乎关注启动相关应用程序,而Start/2启动当前应用程序的监督树。

这是两个独立的问题,所以把条件逻辑放在start/2中似乎会弄脏你的代码。

我注意到在第一个例子中,你在你自己的应用程序之后启动第三个应用程序。在第二个例子中,你在你自己的应用程序之前启动第三个应用程序。你的应用程序需要先发生哪个?

最新更新