我有以下组件类,我想根据属性实例化它;
@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 期间无效?
我想在应用程序的官方 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)