24 時間年中無休で実行され、新しいモジュールまたは既に読み込まれているモジュールの新しいバージョンを再起動せずに読み込むことができるサービスを作成したいと考えています。
次のような方法でjarファイルからクラスをロードできます。
@FunctionalInterface
public interface IWorker {
void doStuff();
}
IWorker worker;
try {
URL[] urls = { new URL("jar:file:" + "C:\\Users\\...\\out\\artifacts\\workers_jar\\somethingworker.jar" +"!/") };
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("hu.test.worker.SomethingWorker");
worker = (IWorker) cls.newInstance();
worker.doStuff();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
ソフトウェアは、モジュールからロードされたクラスの一部の構成にデータベース テーブルを既に使用しているため、そこに完全なクラス名 (およびおそらく jar へのパス) を格納すると、これを使用できます。私の質問は、これをより良い方法で行うことができますか? これは維持するのがやや難しく、簡単に壊れる可能性があります。また、既にロードされているクラスをロードできるかどうかもわかりません。