Мы запустили веб-сайт, написанный на Java, который использует JDBC с jTDS для доступа к базе данных SQL Server.
Наша база данных содержит сложную хранимую процедуру, которая обычно занимает 10 минут. Хранимая процедура работает нормально, если мы выполняем ее напрямую (например, из SQL Server Management Studio), поскольку она не выполняется в транзакции. Но если мы выполним его с использованием jTDS, он заблокирует весь веб-сайт на 10 минут. Это происходит потому, что jTDS запускает его в транзакции, и поэтому все запросы веб-сайта находятся в ожидании, пока транзакция завершится.
Например, из-за транзакции сайт блокируется следующим образом:
Connection connection = DriverManager.getConnection("jdbc:jtds:sqlserver://example/example");
CallableStatement callableStatement = connection.prepareCall("exec dbo.procTest");
callableStatement.execute();
Есть ли способ запустить хранимую процедуру с использованием JDBC / jTDS без ее выполнения в транзакции?
Обратите внимание, что вызов этого соединения через jTDS недействителен:
connection.setTransactionIsolation(Connection.TRANSACTION_NONE);
Это вызывает исключение, указывающее, что параметр Connection.TRANSACTION_NONE не поддерживается jTDS.
РЕДАКТИРОВАТЬ: Вероятно, я мог бы задать вопрос лучше: основная проблема не в самой транзакции, а в том, что транзакция заставляет блокировки базы данных удерживаться в течение 10 минут. Либо мне нужно избавиться от транзакции , либо мне нужно блокировок, снятых во время транзакции .