А какие проблемы с томкатом? В сервлетах есть такое понятие, как листенеры. Определяете листенер, который реализует ServletContextListener. В нем заводите свои треды, которые живут, пока живет ваше приложение в томкате. Прописываете его в web.xml. В ваших рест-сервисах достаточно получить ServletContext и оттуда забирать созданный инстанс класса.
<listener>
<listener-class>
my.long.life.clazz.Listener
</listener-class>
</listener>
Вот подробно разобран листенер (пункт 5 если чо) -
https://www.journaldev.com/1945/servletcontextlist...
Ну или плюнуть на сервлеты к херам собачьим и сделать все на javalin или jooby! (мой поросячий выбор)
import io.javalin.Javalin;
public class HelloWorld {
public static void main(String[] args) {
MyTelegramBot mybot = new MyTelegramBot(); // тут херачим телеграм
Javalin app = Javalin.create().start(7000); // тут запускаем сервер
app.get("/", ctx -> ctx.result("Hello World")); // тут херачим свои REST
app.put("/myrest", ctx -> mybot.send(ctx));
}
}