我想从我的应用程序动态更改被调用存储过程的名称,而不必使用SimpleJDBC部署我的应用程序。
我正在使用相干缓存来缓存在控制表中维护的存储过程的活动版本。在没有更改存储过程的输入/输出的情况下更改功能的情况下,我部署新版本的存储过程并更新控制表中的新名称。在缓存的TTL(生存时间)到期并刷新缓存后,新名称将可供应用程序使用。
然而,我的观察是即使刷新缓存,execute语句也会调用部署期间可用的旧版存储过程,如何更改
Map response = simpleJdbcCall.execute(new MapSqlParameterSource(map));
非常感谢任何帮助。
由于
答案 0 :(得分: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没有任何内容,请小心选择问题的标签。