11

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

我尝试在位于 users->appdata->locallow->sun->java>deployment 的 deployment.properties 文件中设置它,并直接将 key=value 放在 java 控制面板的运行时参数中,但不起作用。

请帮助我正确设置它,或者如果存在要设置这些值的不同属性文件,请分享路径?我用谷歌搜索但找不到。在此先感谢

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

4

6 回答 6

6

无需添加单独的文件。

使用setProperties方法。

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

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

官方文档

如果您仍想创建:文档示例

于 2013-08-23T06:50:06.227 回答
5

如果您想为 设置自定义属性文件System.getProperty,这就是我们在这里所做的:

  1. 为您将为 Web 应用程序创建的所有类创建一个基类作为基对象。
  2. 在基类中,编写此代码
    java.io.InputStream is = loader.getResourceAsStream("custom system property filename");
    System.getProperties().load(is);
    
于 2014-08-19T02:31:14.937 回答
4

好吧,System.getProperty(String)返回与 JVM 的全局系统相关的属性。在这里,您可以找到可用属性的列表。

如果你想加载一个自定义的属性文件,你应该在你自己的属性对象中加载这个文件,你可以在这里找到一个例子。您应该将此Properties对象与系统属性分开。您永远不应该只将自定义属性加载到系统属性中。(您可以通过 来做到这一点System.setProperties(Properties)。)这就像定义全局变量一样,这是程序设计不佳的标志

于 2013-08-23T06:54:36.603 回答
4

这些值是在运行时使用本机代码设置的。它在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);
    .......
    .......
    .......
于 2014-04-14T15:53:01.283 回答
1

它们存储在调试/运行配置中 单击此处获取屏幕截图

你可以像这样访问它们。

System.out.println(System.getProperty("username"));
System.out.println(System.getProperty("password"));
于 2018-07-26T18:58:05.743 回答
0

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

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

等等

于 2013-08-23T06:57:00.050 回答