Я не могу разговаривать с Spring, потому что я им не пользуюсь.
Если бы это был я, с моей шляпой Java EE, я бы просто использовал источник данных JNDI, создавал бы один для каждого клиента и просматривал его по имени клиента или любому другому идентификатору, который вы используете для различения ваших клиентов.
Теперь я уверен, что это можно сделать с помощью Spring, я просто не могу сказать вам, как.
Насколько хорошо обычные реализации пула соединений с базами данных обрабатывают «100 баз данных» с любым количеством соединений, это другой вопрос (на ум приходят видения нескольких сотен открытых сокетов соединений). Я тоже не могу говорить об этом, не сделав этого.
Но после этого, поскольку каждый пул указывает на отдельную базу данных, тогда вы в основном все сделали. Каждый пул может иметь свою собственную конфигурацию, поэтому вы можете перемещать БД на разные хосты и т. Д.
Это было бы моим первым решением проблемы до тех пор, пока она не провалилась при тестировании, но я предполагаю, что точкой сбоя будет реализация пула БД или связанная с этим. Все остальное - это типичный сервер БД и Java.