将.yml文件中的所有spring boot属性设置为系统属性

时间:2017-04-12 04:45:36

标签: java spring-boot keystore jvm-arguments vmargs

我正在开发一个spring boot项目,其中传递了许多VM参数以供应用程序启动,即证书位置,特定的配置文件类型(不是dev,qa,prod等)。
我正在努力将所有配置移动到default.yml文件中 问题陈述
default.yml中设置的属性只能访问spring上下文的环境接口,即org.springframework.core.env.Environment,并且属性未设置自动/默认情况下进入系统属性
我在方法 contextInitialized 中通过列表器 ServletContextListener 在系统中设置属性。
但是我不希望使用环境.g​​etProperty(key)显式调出所有属性,而我希望spring上下文中可用的所有属性都应该循环/不用循环设置到system /环境变量。
预期解决方案
我正在寻找一种方法,在listner方法中我可以将default.yml文件中定义的所有属性设置为系统属性,而无需按名称访问属性。

下面是我正在遵循的方法,将从spring env / default.yml中提取的活动配置文件设置为system属性。我不想获得有效的个人资料或从yml获取任何属性,但希望.yml中的所有属性都自动设置到系统中。

    create procedure Filter
        @CatID int
        ,@CatSubID int
        ,@Year int
    as
    begin
        select * from MyTable
        where CatID=@CatID and CatSubID=@CatSubID and year(PubDate)=@Year
    end

1 个答案:

答案 0 :(得分:0)

你可以使用这样的东西:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Properties;

@Component
public class EnvTest {

    final StandardEnvironment env;

    @Autowired
    public EnvTest(StandardEnvironment env) {
        this.env = env;
    }

    @PostConstruct
    public void setupProperties() {
        for (PropertySource<?> propertySource : env.getPropertySources()) {
            if (propertySource instanceof MapPropertySource) {
                final String propertySourceName = propertySource.getName();
                if (propertySourceName.startsWith("applicationConfig")) {
                    System.out.println("setting sysprops from " + propertySourceName);
                    final Properties sysProperties = System.getProperties();

                    MapPropertySource mapPropertySource = (MapPropertySource) propertySource;
                    for (String key : mapPropertySource.getPropertyNames()) {
                        Object value = mapPropertySource.getProperty(key);
                        System.out.println(key + " -> " + value);
                        sysProperties.put(key, value);
                    }
                }
            }
        }
    }
}

当然,请在它为您工作时删除标准消息