java—在spring启动应用程序启动后设置系统属性是否合适?

ctrmrzij  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(400)

因为每个属性都被设置到每个应用程序的jvm示例中,所以一旦我的应用程序设置了所有it bean并开始在我的服务器上运行以下内容,将会发生什么行为:
system.setproperty(字符串键,字符串值)是否会在运行时通过更改特定jvm示例中的前一个键来反映新的更改,或者是否会创建新示例?
我还注意到在一个构造函数中有一个不同的异常,我试图在它之前设置属性。

8yparm6h

8yparm6h1#

我做了一些测试,结果是:
如果在bean的构造函数中使用属性,则在属性更改后旧bean不会更改。因此,更改不会影响默认的bean Scope . 如果您有带有@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端点时,每次都会得到不同的响应(每次都会有一个“hey”)
如果删除@requestscope,您总是得到相同的答案。

相关问题