Застревание, когда CallableStatement выполняется в приложении SpringBoot - PullRequest
0 голосов
/ 17 апреля 2019

Когда я запускаю CallableStatement в PL / SQL DB, он зависает. Я думаю, что это проблема основного потока , но я не знаю, как ее исправить.

Мой OracleService класс:

@Service
public class OracleService {

    private static final Logger LOG = LoggerFactory.getLogger(OracleService.class);

    private static final String PROCEDURE = "{ call <USER>.<PACKAGE>.<PROCEDURE_NAME>(?, ?) }";

    @Autowired
    private OracleConfig oracleConfig;

    public void testProcedure() {

        try (Connection connection = oracleConfig.connection()) {
            connection.setAutoCommit(true);

            CallableStatement callableStatement = connection.prepareCall(PROCEDURE);

            int index = 1;

            Date currDate = new Date();
            callableStatement.setDate(index++, new java.sql.Date(currDate.getTime()));
            callableStatement.registerOutParameter(index++, OracleTypes.CURSOR);

            callableStatement.execute(); // Here it is getting stucked

            // Processing data
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}

И это называется просто CommandLineRunner в Application классе:

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    CommandLineRunner lookup() {
        return args -> {
                    OracleService service = new OracleService();
                    service.testProcedure();
         };
    }
}

Если кто-нибудь знает, пожалуйста, помогите мне)

1 Ответ

0 голосов
/ 17 апреля 2019

Большое спасибо тем, кто отвечает на комментарии.Глупая проблема была связана с оператором SQL, ожидающим обновления в моем клиенте.Будьте осторожны =)

PS: как уже упоминалось @ M.Deinum, когда вы используете Spring, лучше всего извлекать Connection s из пула JdbcTemplate

...