日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据

發布時間:2024/10/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

背景

運行中的應用修改了配置后應用能生效有多種解決方案,比如:

  • 配置存入redis中
  • 修改了配置文件后按時檢測配置文件是否被修改,被修改則讀取修改后的內容
    下面介紹springboot工程通過jmx動態修改配置不停機的方式來管理配置信息,此種方式使用簡單,而且實時生效。
  • 知識普及

    • jmx
    • MBean:所有被MBeanServer管理的資源,提供了訪問接口,可通過RMI或HTTP訪問

    實現功能

    動態修改應用的瀏覽器黑名單

    實現過程

    編寫MBean類

    編寫瀏覽器黑名單類,使用ManagedResource注解使得spring將其注冊到MBeanServer。

    @Component @ManagedResource(objectName = "blacklist:name=browser", description = "request from those browser not allow") public class BlackListMBean {private final Set<String> blackList = new HashSet<>( Arrays.asList("firefox") );@ManagedAttribute(description = "obtaining blacklist")public Set<String> getBlackList() {return blackList;}@ManagedOperation@ManagedOperationParameter(name = "browser", description = "adding browser to blacklist")public void addBlackArea(String browser){blackList.add(browser);}@ManagedOperation@ManagedOperationParameter(name = "browser", description = "removing browser from blacklist")public void removeFromBlacklist(String browser){blackList.remove(browser);}public boolean allow(String browser){for (String name : blackList) {if ( browser.startsWith(name) ) return false;}return true;} }

    告訴Spring自動注冊MBean

    @SpringBootApplication @EnableMBeanExport public class DemoApplication {public static void main(String[] args) {ConfigurableApplicationContext context = SpringApplication.run(DemoApplication.class, args);SpringUtil.setContext(context);System.out.println("ok");} }

    編寫攔截器攔截客戶端請求

    public class BrowserInterceptor extends HandlerInterceptorAdapter{@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String userAgent = request.getHeader("User-Agent");//獲取瀏覽器類型String browserName = UserAgent.parseUserAgentString(userAgent).getBrowser().getName().toLowerCase();//獲取瀏覽器類型BlackListMBean blackListMBean = SpringUtil.getBean(BlackListMBean.class);boolean flag = blackListMBean.allow(browserName);if (!flag){printErr(response);}return flag;}private void printErr(HttpServletResponse response) throws IOException {try (PrintWriter writer = response.getWriter()){writer.write("browser not support");writer.flush();}} }

    注冊攔截器

    @Configuration public class SysConfig implements WebMvcConfigurer {//配置攔截器@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor( new BrowserInterceptor() );} }

    測試

  • 啟動工程
  • 使用jconsole連接工程,jconsole使用參考以往博文。
  • 在jconsole找到注冊的MBean
  • 使用被加入黑名單的firefox瀏覽器訪問
  • 通過jconsole從黑名單移除firefox


    調用成功后再次使用瀏覽器訪問
  • 總結

    以上是生活随笔為你收集整理的java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。