2016-09-12 7 views
1

Я хочу динамически изменять имя вызываемой хранимой процедуры из моего приложения без необходимости развертывать мое приложение с помощью SimpleJDBC.Как динамически изменять имя хранимой процедуры при использовании Spring SimpleJdbcCall

Я использую когерентное кэширование для кэширования активной версии хранимой процедуры, которая поддерживается в таблице управления. В случае изменения функциональности без изменения ввода/вывода хранимой процедуры я развертываю новую версию хранимой процедуры и обновляю новое имя в таблице управления. После того, как срок действия TTL (время ожидания) кэша истек, а кеш обновлен, новое имя становится доступным для приложения.

Однако мое наблюдение, даже если кэш обновляется Выполнить оператор называет старую версию хранимой процедуры, которая была доступна во время развертывания, как я могу изменить это

Map response = simpleJdbcCall.execute(new MapSqlParameterSource(map)); 

Любая помощь с этим очень ценится ,

Thanks

ответ

0

Похоже, что-то не так с вашим дизайном.

SimpleJdbcCall является одноразовым компиляции объекта:

/** 
* Compile this JdbcCall using provided parameters and meta data plus other settings. 
* <p>This finalizes the configuration for this object and subsequent attempts to compile are 
* ignored. This will be implicitly called the first time an un-compiled call is executed. 
* @throws org.springframework.dao.InvalidDataAccessApiUsageException if the object hasn't 
* been correctly initialized, for example if no DataSource has been provided 
*/ 
public synchronized final void compile() throws InvalidDataAccessApiUsageException { 

Таким образом, вы не можете изменить свое внутреннее состояние во время выполнения.

Но я могу предложить вам решение, подобное новому кэшированному экземпляру для каждого нового имени процедуры. Для этого вы можете заказать код @Cached, который вернет вам экземпляр SimpleJdbcCall. Поэтому, если вы истекаете срок действия кэша, для вас будет создан новый экземпляр, и вы несете ответственность за заполнение фактического имени процедуры для этого нового объекта.

P.S. И да, нет ничего для Spring Integration, пожалуйста, будьте осторожны при выборе тегов для вопроса.

Смежные вопросы