有没有一种方法可以使用另一个属性源(特别是系统环境)覆盖通过Spring Cloud Config
Server设置的属性?我知道我可以通过遍历Environment
对象的PropertySource
s
来手动执行此操作,但是如果可以将其设置为使bootstrapConfig
源成为最低优先级,那将是理想的选择。
FWIW,我通过编写一个自定义ApplicationListener
事件来实现此目的,该自定义事件在周期的早期触发,但在Config Service
PropertySource
加载后触发。如果有人感兴趣,我已在此处附加了代码。如果有一种“正式的”
Spring方式可以做到这一点,我仍然很感兴趣,但是可以这样做:
package com.example;
import org.springframework.boot.context.event.ApplicationPreparedEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.core.env.PropertySource;
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ConfigServicePropertyDeprioritizer
implements ApplicationListener<ApplicationPreparedEvent>
{
private static final String CONFIG_SOURCE = "bootstrap";
private static final String PRIORITY_SOURCE = "systemEnvironment";
@Override
public void onApplicationEvent(ApplicationPreparedEvent event)
{
ConfigurableEnvironment environment = event.getApplicationContext()
.getEnvironment();
MutablePropertySources sources = environment.getPropertySources();
PropertySource<?> bootstrap = findSourceToMove(sources);
if (bootstrap != null)
{
sources.addAfter(PRIORITY_SOURCE, bootstrap);
}
}
private PropertySource<?> findSourceToMove(MutablePropertySources sources)
{
boolean foundPrioritySource = false;
for (PropertySource<?> source : sources)
{
if (PRIORITY_SOURCE.equals(source.getName()))
{
foundPrioritySource = true;
continue;
}
if (CONFIG_SOURCE.equals(source.getName()))
{
// during bootstrapping, the "bootstrap" PropertySource
// is a simple MapPropertySource, which we don't want to
// use, as it's eventually removed. The real values will
// be in a CompositePropertySource
if (source instanceof CompositePropertySource)
{
return foundPrioritySource ? null : source;
}
}
}
return null;
}
}
我需要我的应用程序应该从环境变量而不是应用程序中选择键的值。yml。 > 如果环境变量中不存在特定属性,则应从应用程序中选取值。yml,否则。
使用Helm模板,我可以指定部署环境变量。 但是,如果环境变量通过Openshift web console手动修改,那么即使模板代码发生了更改,它也会在升级时被Helm忽略。 模板/Deployment.yaml values.yaml 我如何使Helm在升级时总是覆盖环境变量?
问题内容: 我用来将货币从BigDecimal格式化为字符串。按预期工作,问题在于我们的主要目标是荷兰市场,而默认的荷兰格式很奇怪。 让我解释一下,当格式化-125时,荷兰语将得到“€125-”(预期为“-€125”)。英国按预期方式提供“-£125.50”。 我可以检查语言环境是否为荷兰语,然后在每次我要设置小数格式时都提供一个模式。但是我更喜欢一个解决方案,它可以覆盖荷兰的格式设置。我在考虑以
我有两个视频,其中一个覆盖在另一个上,覆盖的只有几秒钟长,我希望它在主视频播放的同时保持循环。我尝试了我能想到的一切,但似乎在ffmpeg中都行不通 将一个覆盖在另一个之上,但没有循环。将更改为 给我一条错误消息 [movie@01B19FC0]找不到键“loop”。[movie@01b19f40]分析选项字符串时出错:“loop=0”初始化带有参数“重叠”的筛选器“movie”时出错。wmv:l
问题内容: 我正在使用maven-jetty-plugin并尝试使用-Djetty.port = 8090覆盖我的jetty.xml设置,但是它不起作用。仅当我从jetty.xml文件中删除连接器部件时,端口才是8090。 所以: 随着连接器在端口8080中启动 如果没有在端口8090中启动连接器 问题是我需要配置接受器,统计信息和其他内容。我尝试仅从连接器中删除端口,但是没有用。 我正在使用:
我试图满足几个使用FFMPEG构建视频文件的分层场景。 场景1:将一个视频(指定视频的不透明度)覆盖在一个图像的顶部,作为结果创建一个新的视频。 我用以下方法解决了这个问题: 我正在将视频缩放到3840x2160以匹配我的图像(理想的情况下,我会让它们事先匹配)。 场景2:现在有3层,视频-图像-图像。中间的图像层是带有文字的透明图像。所以我们有一个基础图像,上面覆盖了文本,在一定的不透明度下有一