小编Mer*_* Z.的帖子

在 ConditionalOnExpression 评估期间 PropertySource 不可用

我有以下组件类,我想根据属性实例化它;

@Component("componentA")
@PropertySource("classpath:components.properties")
@ConditionalOnExpression("'${components.enabled}'.contains('componentA')")
public class ComponentA implements ComponentIF {
...
Run Code Online (Sandbox Code Playgroud)

components.properties 文件具有以下属性;

components.enabled=componentA,componentB,componentD
Run Code Online (Sandbox Code Playgroud)

问题是@PropertySource("classpath:components.properties")在评估@ConditionalOnExpression("'${components.enabled}'.contains('componentA')").

另一方面,如果我将components.enabled=componentA,componentB,componentD属性放在 spring-boot 的application.properties文件中,则该属性在 ConditionalOnExpression 评估期间可用,并且按预期工作。

但是,我想使用components.properties以将所有组件特定的属性保持在同一位置。

任何想法是否 PropertySource 在 ConditionalOnExpression 期间无效?

java spring spring-boot spring-java-config

5
推荐指数
1
解决办法
755
查看次数

在 Dockerfile 中循环/迭代

我想在应用程序的官方 docker 基础映像中包含并启用一些自定义插件。

这是目录结构的样子;

.
+-- Dockerfile
+-- plugins
|   +-- plugin_1
|   +-- plugin_2
|   +-- plugin_3
|   +-- ...
|   +-- plugin_n
Run Code Online (Sandbox Code Playgroud)

如果我需要包含插件plugin_1、plugin_3、plugin_7和plugin_8,Dockerfile如下所示;

FROM myapp_officialimage

COPY plugins/plugin_1/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_1

COPY plugins/plugin_3/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_3

COPY plugins/plugin_7/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_7

COPY plugins/plugin_8/* /usr/lib/myapp/plugins/
RUN myapp-plugins.sh enable plugin_8

CMD ["myapp-start.sh"]
Run Code Online (Sandbox Code Playgroud)

问题是,是否可以迭代/循环列表以消除上面的样板?

例如,像下面这样的 Dockerfile 会更干净,更易于维护;

FROM myapp_officialimage

ENV CUSTOM_PLUGIN_LIST="plugin_1 plugin_3 plugin_7 plugin_8" …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

5
推荐指数
1
解决办法
8240
查看次数