gpt4 book ai didi

java - 如何根据请求在 java bean 中动态更改 "constant"值( hibernate )?

转载 作者:行者123 更新时间:2023-11-28 22:50:48 26 4
gpt4 key购买 nike

我正在使用 Hibernate 5.0.3 和 tomcat8 服务器。

在返回 Json 响应的第一部分(对象)中,我有关于错误消息、httpcode、api 版本和应用程序版本的数据。它称为 MessageJson,第二部分是用户请求的对象/返回值。

如何在不重启服务器并向其上传新的 .war 的情况下即时实现或更改 appVersion 属性的值?属性在下面的代码中标记:

public class MessageJson {

private int httpCode;
private String errorMessage;
private String apiVer;
private String appVersion ;

public MessageJson (int httpCode, String errorMessage) {
this.httpCode = httpCode;
this.errorMessage = errorMessage;
this.apiVer = "0.905";
this.appVersion = "1.350";//How to change this value without restarting server? And without reading from DB on every single request from api?

}
}

这是从 Api 返回的完整对象/Json 的结构:

public class ResponseJson {

private MessageJson message;
private Object body;

public ResponseJson (MessageJson message, Object body) {
this.body = body;
this.message = message;
}

hibernate 是每次都从 .properties 文件中读取值还是将值保存在 RAM 中?

更新这种变量值而不在每次调用时都从数据库请求它的最有效方法是什么?有没有办法像上面的例子那样将它保存在 ram 中,并在数据库或特定文件中更改时请求检查?在请求检查时,新值将覆盖类中的现有值。

示例:在每个请求值表单类 (1.350) 被返回。在管理员请求调用更改它后,数据库有新值“1.500”,旧值(1.350)被覆盖。用户的每次下一次调用都只会返回 1.500,而无需在数据库或文件中进行检查。

最佳答案

你可以使用类似 Apache Commons Configuration 的东西支持自动重载

基本上让您的 appVersion 在示例属性文件中说 config.properties 在您的 war 文件中包含以下详细信息

appVersion=1.35
key=Value
...
...

然后您可以使用 Apache Commons Configuration API以便在代码中需要的任何位置加载、读取、更新属性文件。

通过这种方式,您可以即时创建/读取/更新您的属性,而无需重新启动服务器。

对于hibernate,它的属性和映射文件都包含在一个SessionFactory实例中,它是一个单例。这个 sessionFactory 实例的权重很高,在整个应用程序中共享,并且不可变

虽然不可取,因为它会导致您的应用程序容易出错且不一致,但您可以销毁 SessionFactory 实例并创建另一个实例,但您需要确保没有任何 Session 实例引用它。简而言之,如果您这样做,请做好损害控制工作的准备。

关于java - 如何根据请求在 java bean 中动态更改 "constant"值( hibernate )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40133647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com