この方法は、1つまたは2つのサーバーのみなど、小規模なプロジェクトにのみ適しており、構成ファイルを直接変更できます。たとえば、スプリングMVCは戦争パッケージの形で展開され、リソース内の構成ファイルを直接変更できます。 Spring Boot Projectであり、この方法を使用する場合は、ほとんどのSpring BootがJARパッケージに展開され、パッケージに入力する構成ファイルを直接変更できないため、固定ディレクトリなどの外部編集可能ファイルを参照する必要があります。比較的大きなプロジェクトの場合、CtripのApollo、Consulなど、構成センターを使用することをお勧めします。
オリジナルの方法
元の方法は、構成を変更するたびにサーバーの再パッケージ化とリリースを指します。
Spring MVCを使用して開発し、開発が完了した後、戦争パッケージを形成してTomcatに展開するとします。現時点でSMSインターフェイスアドレスを変更する場合。
以下を行う必要があります。
1.構成ファイルを開き、構成情報を変更します。
2。コンパイルとパッケージ。
3. Tomcatを停止し、古いプロジェクトディレクトリを削除します。
4.新しい戦争パッケージをWebAppsに入れて、Tomcatを開始します。
もちろん、Tomcatでこのプロジェクトの構成ファイルを直接見つけてから変更できますが、Tomcatを再起動する必要もあります。
開発やテストを行うだけの場合、時間の無駄になることは確かに受け入れられます。それで、私は時間を無駄にしたり、トムキャットを再起動したくありません、何らかの方法はありますか?これは、紹介するこの記事の番です。
WatchServiceメソッド
Javaは、オペレーティングシステムのファイルモニターを使用してディレクトリとファイルを監視するWatchServiceインターフェイスを提供します。監視されているオブジェクトが変更されると、信号通知が存在するため、変更を効率的に発見できます。
この方法の一般的な原則は、最初に、オペレーティングシステムに従って新しいモニター(WatchService)を使用してから、監視対象の構成ファイルを作成するディレクトリまたはファイルを選択し、監視対象のイベントを削除、編集、監視された場所でモニターの登録など、監視するイベントをサブスクライブします。サブスクライブイベントに対応するイベントがトリガーされると、対応するロジックが実行されます。
コードから始めましょう。これはSpring MVCプロジェクトにあり、リソースディレクトリが監視されます。
@RepositoryPublic Class ConfigWatcher {private static final logger logger = loggerFactory.getLogger(configwatcher.class); Private Static WatchService WatchService; @postconstruct public void init(){logger.info( "sport configuration file monitor"); try {watchservice = filesystems.getDefault()。newWatchService(); url url = configwatcher.class.getResource( "/");パスパス= paths.get(url.touri()); path.register(WatchService、StandardWatchEventKinds.Entry_Modify、StandardWatchEventKinds.Entry_Create); } catch(例外E1){e1.printstacktrace(); } / ***監視スレッドを起動* /スレッドwatchthread = newスレッド(new WatchThread()); watchthread.setdaemon(true); watchthread.start(); / **フックを閉じるために登録*/スレッドフック= newスレッド(new runnable(){@Override public void run(){try {watchservice.close();} catch(ioexception e){e.printstacktrace();}}}); runtime.getRuntime()。addshutdownhook(hook); } public class watchthread runnable {@override public void run(){while(true){try {//監視プールの変更を取得してみてください。 for(watchevent <? logger.info(editfilename); /*** configuration*/} watchkey.reset(); //モニタリングを完了するには、モニターを一度リセットする必要があります} catch(例外e){e.printstacktrace(); }}}}}コードは非常にシンプルで、一目で理解できます。プロジェクトが開始されたら、filesystems.getDefault()。newWatchService()を使用して、オペレーティングシステムに基づくWatchServiceを作成します。次に、リソースディレクトリのURLを取得し、パスを取得し、パスオブジェクトのレジスタメソッドを呼び出し、モニターを登録し、編集してイベントを作成します。イベントはStandardWatchEventKindsクラスで定義されており、4つのタイプがあります。
1。StandardWatchEventKinds#Overflow
2。StandardWatchEventKinds#entry_create
3。StandardWatchEventKinds#entry_delete
4。StandardWatchEventKinds#entry_modify
次に、WatchThreadスレッドが個別に開始され、変更ロジックが処理され、Take()メソッドは、変更が発生するまで、しばらく無限のループで呼び出されます。構成ファイルが変更されたら、変更を監視すると、ロジックが呼び出され、構成をリロードします。さらに、各変更が発生した後、Monitorをリセットするためにwatchkey.reset()メソッドを呼び出す必要があります。
最後に、フックを登録する必要があり、JVMが閉じたときにモニターをオフにすることができます。
この方法を使用すると、構成変更がいくつかある場合、Tomcatに直接移動して構成ファイルを変更でき、再起動せずに有効になります。
この記事では、主にこの方法を紹介しています。これも上記です。この方法は、非常に単純なプロジェクトにのみ適しています。大規模なプロジェクトの場合、より高度な方法が必要です。
センターを構成する方法
プロジェクトの複雑さが高くなると、構成の変更はリアルタイムで有効になり、グレースケールリリースは環境、クラスター管理構成、完全なアクセス許可と監査メカニズムに分割され、プロジェクトで考慮される問題になる可能性があります。現時点では、構成ファイルのみに依存することは無能に思えます。
現在、最も一般的に使用される構成センターには、ETCD、Zookeeper、Disonf、Apolloなどがあります。DisonfとApolloはどちらもすぐに使用でき、完全な機能とUIをサポートしています。また、etcdとZookeeperにはカスタム開発が必要です。
学生は自分のニーズに応じて選択でき、より詳細なコンテンツを自分で検索して実践できます。