System.getProperty(" key")从何处(哪个属性文件)读取?

时间:2013-08-23 06:46:38

标签: java jvm filesystems

我的应用程序使用String str = System.getProperty("key","default");,它始终返回默认值,因为我无法在属性文件中设置键值对。

我尝试在位于users-> appdata-> locallow-> sun-> java>部署的deployment.properties文件中设置它,并直接将key = value放在java控制面板中的runtime参数中但不能正常工作

请帮我正确设置,或者如果存在要设置这些值的其他属性文件,请分享路径? 我谷歌但是找不到。谢谢你提前

编辑:我们使用jeety服务器进行部署。我们的源代码捆绑了许多属性文件。

6 个答案:

答案 0 :(得分:5)

无需添加单独的文件。

使用setProperties方法。

  

要修改现有系统属性集,请使用System.setProperties。此方法采用已初始化为包含要设置的属性的Properties对象。此方法使用Properties对象表示的新集替换整个系统属性集。

警告:更改系统属性具有潜在危险,应谨慎行事。启动后不会重读许多系统属性,这些属性仅供参考。更改某些属性可能会产生意外的副作用。

Official Docs

如果您仍想创建:Example by docs

答案 1 :(得分:4)

如果要为System.getProperty设置自定义属性文件,我们这样做: 1.创建基类作为您为Web应用程序创建的所有类的基础对象。 2.在基类中,编写此代码

java.io.InputStream is = loader.getResourceAsStream("custom system property filename");
System.getProperties().load(is);

答案 2 :(得分:2)

好吧,System.getProperty(String)返回与JVM的全局系统相关的属性。 Here you can find可用属性列表。

如果要加载属性的自定义文件,则应将此文件加载到您可以find an example here的属性对象中。您应该保留此Properties object单独的系统属性。您永远不应该只将自定义属性加载到系统属性中。 (您可以通过System.setProperties(Properties)执行此操作。)这就像定义sign of poor program design的全局变量一样。

答案 3 :(得分:2)

在运行时使用本机代码设置值。它设置在 System.c 内,还有一个名为 Java_java_lang_System_initProperties

的函数

<强>段

JNIEXPORT jobject JNICALL
Java_java_lang_System_initProperties(JNIEnv *env, jclass cla, jobject props)
{
    char buf[128];
    java_props_t *sprops = GetJavaProperties(env);
    jmethodID putID = (*env)->GetMethodID(env,
                                          (*env)->GetObjectClass(env, props),
                                          "put",
            "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
    jmethodID removeID = (*env)->GetMethodID(env,
                                          (*env)->GetObjectClass(env, props),
                                          "remove",
            "(Ljava/lang/Object;)Ljava/lang/Object;");
    jmethodID getPropID = (*env)->GetMethodID(env,
                                          (*env)->GetObjectClass(env, props),
                                          "getProperty",
            "(Ljava/lang/String;)Ljava/lang/String;");
    jobject ret = NULL;
    jstring jVMVal = NULL;

    if (sprops == NULL || putID == NULL ) return NULL;

    PUTPROP(props, "java.specification.version",
            JDK_MAJOR_VERSION "." JDK_MINOR_VERSION);
    PUTPROP(props, "java.specification.name",
            "Java Platform API Specification");
    PUTPROP(props, "java.specification.vendor",
            JAVA_SPECIFICATION_VENDOR);

    PUTPROP(props, "java.version", RELEASE);
    PUTPROP(props, "java.vendor", VENDOR);
    PUTPROP(props, "java.vendor.url", VENDOR_URL);
    PUTPROP(props, "java.vendor.url.bug", VENDOR_URL_BUG);
    .......
    .......
    .......

答案 4 :(得分:1)

它们存储在调试/运行配置中 click here for screenshot

您可以像这样访问它们。

System.out.println(System.getProperty("username"));
System.out.println(System.getProperty("password"));

答案 5 :(得分:0)

Javas系统属性由JVM自动设置。您可以通过将-D开关传递给运行时来添加其他属性,例如

java -Dkey=blue -Dhopp=topp ....