我正在使用动态查询,使用select-sql-parameter-source搜索我需要的信息。
这是我的配置:
<int-jdbc:inbound-channel-adapter query="SELECT * FROM CUSTOMER WHERE CUSTOMER.LASTUPDATE_ACTIVE < TO_DATE(:last_process_date,'YYYY-MM-DD HH24:Mi:SS') "
channel="headerEnricher.customerBR01"
update=""
row-mapper="customerRowMapper"
data-source="jdbcTemplate"
max-rows-per-poll="0"
select-sql-parameter-source="parameterSource.customerBR01">
<!-- Cron Time -->
<int:poller fixed-rate="50" time-unit="SECONDS">
</int:poller>
</int-jdbc:inbound-channel-adapter>
<!-- This is to get last process date -->
<bean id="parameterSource.customerBR01" factory-bean="parameterSourceFactory.customerBR01" factory-method="createParameterSourceNoCache">
<constructor-arg value="" />
</bean>
<bean id="parameterSourceFactory.customerBR01" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<!-- Here we get the last process date -->
<entry key="last_process_date" value="@hsqlHistoricProcessServiceDateDAO.getLastProcessDate(3,1,'CUSTOMER')" />
</map>
</property>
</bean>
我看起来loggin出现了两次,所以我在这个函数中改变了我的代码:
hsqlHistoricProcessServiceDateDAO.getLastProcessDate
仅返回帐户变量。 函数代码hsqlHistoricProcessServiceDateDAO.getLastProcessDate如下:
private int contador = 0;
public String getLastProcessDate(Integer country, Integer business, String tableName) {
contador++;
System.out.println("Contador "+ contador);
return Integer.toString(contador);
}
结果是:
Contador 1
Contador 2
所以,这个方法被调用两次,我只需要一个调用,因为在&#34;真实代码&#34;我已经为此记录了两次。
答案 0 :(得分:0)
对于您的用例,您不需要禁用缓存;请改用它......
<bean id="parameterSource.customerBR01"
factory-bean="parameterSourceFactory.customerBR01"
factory-method="createParameterSource">
<constructor-arg value="" />
</bean>
当在多个参数中使用相同的密钥并且您希望重新评估每个参数时,需要...NoCache
版本。
禁用缓存会产生这种额外的副作用,因为每次使用密钥时都会调用getValue()
方法两次。一个电话来自NamedParameterUtils.substituteNamedParameters()
;第二个来自NamedParameterUtils.buildValueArray()
。