有没有办法在运行时在websphere应用服务器中更改java全局变量的值?我在我的java应用程序中使用属性文件来指定全局变量的值。但我有时需要在运行时更改变量的值。例如,如果我有一个名为'fileServerLocation'的变量,其值为'C:\ Users \ test \ Downloads',如果我想将其更改为'C:\ Users \ test \ Desktop',则为有没有办法可以更改变量的值而无需在服务器上重新部署应用程序?
答案 0 :(得分:0)
您可以构建通过HTTP请求触发的Web服务或EJB调用,它所做的只是在运行时更改字段值。您可能需要将此“管理员请求”设置为要求执行身份验证(例如用户名/密码)。此外,您可能需要将此字段声明为volatile
,以便在更改后在所有线程中都可见。
请注意,每个ClassLoader
都有自己的静态字段值(全局变量)。通常所有EJB共享相同的类加载器,但每个war
模块都有自己的类加载器。
答案 1 :(得分:0)
不要使用“全局变量”。创建一个内部服务,在运行时为客户端提供值,并设计服务,使其具有一个接口,该接口可以在运行时接受更改,通过servlet,消息驱动bean和/或其他一些机制。此外,让服务允许客户端注册在特定变量值(或任何变量值)发生变化时可以通知的回调(“监听器”)。
答案 2 :(得分:0)
我不会试图理解全局变量的细节,但我认为“全局变量”是每个Application全局变量。
我将重点关注如何动态更新应以何种方式执行状态更改 我认为通常管理操作的正确方法是使用JMX标准。必须使用操作公开MBean以在运行时动态更新值。使用某种内存障碍,值的更新应该是“线程安全的”。
将使用某种管理工具(JMX客户端)执行值的更新。