8x8x8x.cnfÅäÖÃÎļþ¼ÓÔØÓëÓ¦ÓÃʵ²âÖ¸ÄÏ

À´Ô´£ºÖ¤È¯Ê±±¨Íø×÷Õߣº
×ÖºÅ

publicclassConfigLoader{publicstaticPropertiesloadConfig(StringconfigFile){Propertiesprops=newProperties();try(FileInputStreamfis=newFileInputStream(configFile)){props.load(fis);}catch(ÔÚÇ°ÃæµÄ²¿·ÖÖУ¬ÎÒÃÇÒѾ­½éÉÜÁËÈçºÎ¼ÓÔØºÍÓ¦ÓÃ8x8x8x.cnfÅäÖÃÎļþ£¬²¢?½øÐÐÁËÏêϸµÄʵ¼ùʾÀý¡£

ÎÒÃǽ«ÉîÈë̽ÌÖ¸ü¶à¸ß¼¶Ó¦Óó¡¾°£¬²¢ÌṩÏêϸµÄʵÏÖÒªÁ죬ÒÔ±ãÄúÔÚʵ¼ÊÏîÄ¿ÖиüºÃµØÀûÓÃÕâЩÅäÖÃÎļþ¡£

×î¼Ñʵ¼ùÓ뽨Òé

Á¬Ðø¼à¿ØÓë·´À¡£ºÁ¬Ðø¼à¿ØÏµÍ³µÄÔËÐÐ״̬£¬Í¨¹ý·´Ïì»úÖÆ²»¾øµ÷½âºÍÓÅ»¯ÅäÖÃÎļþÖеIJÎÊý¡£°´ÆÚ¸üУº°´ÆÚ¸üÐÂÅäÖÃÎļþ£¬ÒÔÊÊӦеÄ?Ó¦ÓÃÐèÇóºÍϵͳÇé¿ö±ä¸ï¡£Îĵµ»¯£º½«ËùÓÐÅäÖÃÎļþºÍÓÅ»¯Õ½ÂÔ½øÐÐÏêϸµÄÎĵµ»¯£¬ÒÔ±ã?ÍŶӳÉÔ±ÅäºÏÀí½âºÍʹÓá£Äþ¾²ÐÔ£ºÈ·±£ÅäÖÃÎļþµÄÄþ¾²ÐÔ£¬±ÜÃâÃô¸ÐÐÅϢй¶£¬ÓÈÆäÊÇÔÚÉæ¼°Óû§Êý¾ÝºÍϵͳ×ÊÔ´µÄ²ÎÊýÉèÖÃʱ¡£

avaʾÀý

importjava.util.Properties;importjava.io.FileInputStream;importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Paths;publicclassHotReloadConfigLoader{privatestaticPropertiesprops=newProperties();static{try(FileInputStreamfis=newFileInputStream("8x8x8x.cnf")){props.load(fis);}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidloadConfig(StringconfigFile){try(FileInputStreamfis=newFileInputStream(configFile)){props.load(fis);}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(Stringargs){longlastModified=0;while(true){try{lastModified=Files.getLastModifiedTime(Paths.get("8x8x8x.cnf")).toMillis();Thread.sleep(1000);if(lastModified!=0&&lastModified!=Files.getLastModifiedTime(Paths.get("8x8x8x.cnf")).toMillis()){loadConfig("8x8x8x.cnf");}}catch(IOException|InterruptedExceptione){e.printStackTrace();}//ʹÓÃÅäÖÃÏîStringdbHost=props.getProperty("database.host");System.out.println("CurrentDatabaseHost:"+dbHost);}}}

ÈÕÖ¾¼Í¼ºÍ¼à¿ØÓÅ»¯

ÈÕÖ¾ÎļþÖÎÀí£ºÍ¨¹ýÅäÖÃÎļþÉèÖÃÈÕÖ¾ÎļþµÄ¾ÞϸºÍ±£´æÕ½ÂÔ£¬ÖÆÖ¹ÈÕÖ¾Îļþ¹ý´óµ¼ÖµĴÅÅÌÕ¼ÓÃÎÊÌâ¡£ÉèÖÃÈÕÖ¾ÎļþµÄ?Éú´æÂ·¾¶ºÍȨÏÞ£¬È·±£ÈÕÖ¾ÎļþµÄÄþ¾²ÐԺͿɻá¼ûÐÔ¡£ÊµÊ±¼à¿Ø£ºÊ¹Óø߼¶¼à¿Ø¹¤¾ß£¬ÈçPrometheus¡¢GrafanaµÈ£¬½áºÏ8x8x8x.cnfÅäÖÃÎļþÖÐµÄ¼à¿Ø²ÎÊý£¬ÊµÏÖ¶ÔϵͳµÄʵʱ¼à¿ØºÍ¸æ¾¯¡£

1ʹÓÃPython½âÎö

PythonÊÇÒ»Öֹ㷺ʹÓõıà³ÌÓïÑÔ£¬ËüÌṩÁ˶àÖÖ¿âÀ´½âÎöÅäÖÃÎļþ¡£ÀýÈ磬ÎÒÃÇ¿ÉÒÔʹÓÃconfigparser¿âÀ´½âÎö8x8x8x.cnfÎļþ¡£

importconfigparserconfig=configparser.ConfigParser()config.read('8x8x8x.cnf')#¶ÁÈ¡ÅäÖÃÏîdb_host=config.get('database','host')db_port=config.get('database','port')print(f"DatabaseHost:{db_host}")print(f"DatabasePort:{db_port}")

ÔÚÉÏÊö´úÂëÖУ¬ÎÒÃÇÊ×ÏÈʹÓÃConfigParserÀàÀ´´´Á¢Ò»¸öÅäÖù¤¾ß£¬È»ºóŲÓÃreadÒªÁì¶ÁÈ¡8x8x8x.cnfÎļþ¡£Í¨¹ýgetÒªÁì¶ÁÈ¡ÅäÖÃÏîµÄÖµ¡£

ÔÚ½øÒ»²½?µÄʵ²âÀú³ÌÖУ¬¸ß¼¶¼à¿Ø²âÊԵľßÌå½á¹û

ϵͳ×ÊÔ´¼à¿Ø£ºÊ¹ÓÃPrometheusÊÕ¼¯ÏµÍ³µÄCPU¡¢ÄÚ´æ¡¢ÍøÂçµÈ×ÊÔ´µÄʹÓÃÇé¿ö£¬²¢Í¨¹ýGrafana½øÐпÉÊÓ»¯Õ¹Ê¾¡£ÔÚϵͳ¸ºÔØá¯ÁëÆÚ£¬PrometheusÄܹ»ÊµÊ±¼à¿Ø×ÊԴʹÓÃÇé¿ö£¬²¢ÔÚÒì³£Çé¿ö±¬·¢Ê±£¬Í¨¹ýGrafanaÉú³É¸æ¾¯Í¨Öª¡£

Ó¦ÓÃÐÔÄÜ¼à¿Ø£ºÅäÖÃÎļþÖÐÉèÖõÄÓ¦ÓóÌÐò¼à¿Ø²ÎÊý£¬Ê¹µÃPrometheusÄܹ»ÊÕ¼¯Ó¦ÓóÌÐòµÄÐÔÄÜÊý¾Ý£¬ÈçÏìӦʱ¼ä¡¢ÇëÇóÊýµÈ¡£GrafanaչʾÕâЩÊý¾Ý£¬×ÊÖúÎÒÃÇ·¢Ã÷ÐÔÄÜÆ¿¾±²¢½øÐÐÓÅ»¯¡£

ÈÕÖ¾ÖÎÀíÓëÆÊÎö£ºÅäÖÃÎļþÖÐÉèÖõÄ?ÈÕÖ¾ÖÎÀí²ÎÊý£¬Ê¹µÃϵͳÄܹ»½«ÈÕÖ¾Îļþ°´ÆÚ¹éµµºÍɾ³ý£¬ÖÆÖ¹ÈÕÖ¾Îļþ¹ý´ó¡£Í¨¹ýELKStack£¨Elasticsearch¡¢Logstash¡¢Kibana£©¶ÔÈÕÖ¾½øÐÐʵʱÆÊÎö£¬×ÊÖúÎÒÃÇ¿ìËÙ¶¨Î»ÎÊÌâ¡£

ythonʾÀý

importconfigparserimporttimeimportosconfig=configparser.ConfigParser()defload_config(config_file):globalconfigconfig.read(config_file)load_config('8x8x8x.cnf')defwatch_file(config_file):initial_mtime=os.path.getmtime(config_file)whileTrue:time.sleep(1)ifos.path.getmtime(config_file)>initial_mtime:load_config(config_file)initial_mtime=os.path.getmtime(config_file)watch_file('8x8x8x.cnf')whileTrue:#ʹÓÃÅäÖÃÏîdb_host=config.get('database','host')print(f"CurrentDatabaseHost:{db_host}")time.sleep(1)

}

ÔÚJavaʾÀýÖУ¬ÎÒÃÇͨ¹ý`System.setProperty`½«ÅäÖÃÎļþÖеÄÿ¸ö¼üÖµ¶ÔÉèÖÃΪϵͳÇé¿ö±äÁ¿¡£È»ºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ý`System.getProperty`»ñÈ¡ÕâЩÇé¿ö±äÁ¿¡£####4.2Äþ¾²²ÎÊýÅäÖÃÄþ¾²²ÎÊýÈçÃÜÔ¿ºÍÁîÅÆµÈÐÅÏ¢£¬Í¨³£²»Ó¦Ö±½ÓÔÚ´úÂëÖÐÓ²±àÂë¡£

pythonimportbase64importconfigparser

config=configparser.ConfigParser()config.read('8x8x8x.cnf')

У¶Ô£ºÕÔÆÕ(1C0m4pJyqZtPma0S7t9ZFfz4hTykKag)

ÔðÈα༭£º Óà·Ç
ΪÄãÍÆ¼ö
Óû§ÆÀÂÛ
µÇ¼ºó¿ÉÒÔ̸»°
ÍøÓÑÆÀÂÛ½ö¹©Æä±í´ï¸öÈË¿´·¨£¬²¢²»±êÃ÷֤ȯʱ±¨Á¢³¡
ÔÝÎÞÆÀÂÛ