Предварительная загрузка классов/библиотек Java при запуске jar?
Вопрос
Я написал Thrift-сервер на Java, чтобы использовать преимущества определенного пакета/библиотеки Java, но я не программист Java.
Проблема в;Я вижу тайм-аут для первого вызова RPC на сервер.Запросы на подпоследовательность выполняются без каких-либо проблем и затрагивают только клиенты, написанные на определенных (но важных) языках.
В настоящее время я думаю, что время ожидания ответа сервера истекло, потому что при первом вызове он должен загрузить все библиотеки, необходимые для запроса.Некоторые реализации клиента Thrift должны обрабатывать тайм-аут лучше, чем другие, возможно, оставляя запрос открытым немного дольше.
Есть ли способ в Java предварительно загрузить библиотеки, которые я использую, когда я впервые запускаю файл .jar, чтобы не было задержки при первом запросе?
Решение: Я решил эту проблему (и некоторые другие возникшие), увеличив время ожидания от экономичных клиентов.Тем не менее, я также реализовал ответ static/Class.forName, чтобы помочь в работе, и он отлично работает.Спасибо!
Решение
Вы можете запустить загрузку до того, как сервер начнет работать.Вы не указали, как вы загружаете сервер, классы и какова среда, но вы можете воспользоваться тем фактом, что статический инициализатор класса запускается при загрузке класса.Итак, если вы используете «основной» метод, ваш класс может выглядеть примерно так:
public class Foo {
static {
//this will be run when the class is loaded
try { Class.forName("fully.qualified.class.name.that.i.want.to.Load"); }
catch ...
}
public static void main (string args[])
{
//run my server...
}
}
Другие советы
Вы можете попробовать написать простой клиент внутри самого Java-сервера.Этот клиент ничего не делает, кроме как вызывает какой-то метод на сервере при запуске, вызывая загрузку классов.После того, как этот маленький клиент получает результат (или обратный вызов), он переводит сервер в состояние «доступно для внешнего мира».
Я предлагаю имитировать соединение непосредственно перед открытием сервера.Это гарантирует, что (большая часть) соответствующей ленивой инициализации будет выполнена.