#java #deployment #runtime
#java #развертывание #время выполнения
Вопрос:
Я переношу устаревший проект на новый сервер. Ранее в проекте использовалась Oracle DB, но теперь я хочу, чтобы он использовал Postgress. Запросы достаточно просты и работают одинаково в Postgres.
Однако в проекте отсутствует jdbc-драйвер Postgres. Могу ли я каким-то образом добавить эту зависимость в jar без перекомпиляции?
Комментарии:
1. Нет. если вы используете
java -jar
для запуска своего приложения, вам необходимо изменить файл манифеста внутри jar.
Ответ №1:
Могу ли я как-то добавить эту зависимость в jar без перекомпиляции?
Это зависит.
- Если вы используете сервер как
java -jar myserver.jar ...
, то вам, по крайней мере, потребуется изменить манифест в файле JAR. Строго говоря, это не влечет за собой перекомпиляцию, но вам нужно разнести, изменить и переупаковать файл JAR. - Если сервер использует
Class.forName
для явной загрузкиDriver
класс Oracle, вам нужно будет изменить этот код, чтобыDriver
вместо него загрузить класс Postgres. (Есть и другие способы использования JDBC, которые позволяют избежать этого, но это зависит от того, как реализован ваш устаревший сервер.) - Если ваш сервер использует специфические классы баз данных Oracle или специфические функции SQL Oracle (или ему необходимо сделать то же самое в мире Postgres), потребуются более обширные изменения.
Но без детального изучения вашей кодовой базы мы не можем предсказать, что потребуется.
Мой совет — заменить JAR-файл драйвера Oracle JAR-файлом драйвера Postgres и посмотреть, что произойдет, когда вы запустите свой сервер с базой данных Postgres с соответствующими схемами и данными.
Но я бы не стал делать это «на производстве». Сделайте это в тестовой среде. Если вы не можете настроить подходящую тестовую среду … забудьте об этом.
И если у вас нет исходного кода для вашего сервера, я бы тоже забыл об этом. Если что-то пойдет не так, вам, скорее всего, понадобится исходный код, чтобы выяснить проблему и исправить ее.