java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据
生活随笔
收集整理的這篇文章主要介紹了
java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
運行中的應用修改了配置后應用能生效有多種解決方案,比如:
下面介紹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() );} }測試
調用成功后再次使用瀏覽器訪問
總結
以上是生活随笔為你收集整理的java修改配置不重启,java运行时修改应用数据,通过jmx修改应用运行数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java制作带有logo的二维码,解决z
- 下一篇: java实现表锁行锁