Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring启动应用程序启动后设置系统属性是否合适?_Java_Spring_Spring Boot_Spring Rest - Fatal编程技术网

Java 在Spring启动应用程序启动后设置系统属性是否合适?

Java 在Spring启动应用程序启动后设置系统属性是否合适?,java,spring,spring-boot,spring-rest,Java,Spring,Spring Boot,Spring Rest,由于每个属性都被设置到每个应用程序的JVM实例中,因此,一旦我的应用程序设置了所有it Bean并开始在我的服务器上运行以下内容,将会发生什么行为: System.setProperty(字符串键、字符串值)是否会在运行时通过更改特定JVM实例中的前一个键或创建新实例来反映新的更改 此外,我还注意到一个构造函数中的另一个异常,在该异常之前我尝试设置属性。我做了一些测试,结果如下: 如果在bean的构造函数中使用属性,则旧bean在属性更改后不会更改。因此,更改不会影响默认范围为的bean。如果您

由于每个属性都被设置到每个应用程序的JVM实例中,因此,一旦我的应用程序设置了所有it Bean并开始在我的服务器上运行以下内容,将会发生什么行为:

System.setProperty(字符串键、字符串值)是否会在运行时通过更改特定JVM实例中的前一个键或创建新实例来反映新的更改


此外,我还注意到一个构造函数中的另一个异常,在该异常之前我尝试设置属性。

我做了一些测试,结果如下:

如果在bean的构造函数中使用属性,则旧bean在属性更改后不会更改。因此,更改不会影响默认范围为
的bean。如果您有带有@RequestScope的Bean,则每次收到新请求时,都会创建带有新值的新Bean


@RestController
@RequestScope
public class Controller {

    private String testValue;

    @Autowired
    public Controller(@Value("${pl.bier.test}") String testValue) {
        this.testValue = testValue;
    }

    @GetMapping("/foo")
    public FooModel fooEndpoint() {
        System.setProperty("pl.bier.test", testValue + "bar");
        return new FooModel(testValue);
    }

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class FooModel {

    private String value;

}
访问/foo端点时,每次都会得到不同的响应(每次都会有一个“嘿”)


如果删除@RequestScope,您总是会得到相同的答案。

我做了一些测试,结果如下:

如果在bean的构造函数中使用属性,则旧bean在属性更改后不会更改。因此,更改不会影响默认范围为
的bean。如果您有带有@RequestScope的Bean,则每次收到新请求时,都会创建带有新值的新Bean


@RestController
@RequestScope
public class Controller {

    private String testValue;

    @Autowired
    public Controller(@Value("${pl.bier.test}") String testValue) {
        this.testValue = testValue;
    }

    @GetMapping("/foo")
    public FooModel fooEndpoint() {
        System.setProperty("pl.bier.test", testValue + "bar");
        return new FooModel(testValue);
    }

}

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
class FooModel {

    private String value;

}
访问/foo端点时,每次都会得到不同的响应(每次都会有一个“嘿”)


如果删除@RequestScope,您总是会得到相同的答案。

从您自己的代码中设置系统属性通常不是一个好主意。@chrylis小心光学您能更详细地解释一下吗?如果我为系统属性创建一个单独的配置bean,并且具有有序的。最低的\u优先级,则可以先创建它,然后再创建其他bean,因此,我的其他bean不必担心从自己的代码中设置系统属性通常不是一个好主意。@chrylis cautiouslyoptimistic您能更详细地解释一下吗?如果我为系统属性创建一个具有Ordered.LOWEST_优先级的单独配置bean,是否可以在之前先创建它任何其他的豆子,这样我的其他豆子就不用担心了