Spring JdbcTemplate只应在调用其方法时建立连接
我们遇到这样一种情况:一个位置1停机维护2天,无论何时调用位置2,它都会尝试连接到位置1,无论其是否被调用,都会获取超时和连接超时日志。是否有一种方法可以使jdbcTemplate仅在调用其方法之一时进行连接,而不注释任何代码。任何帮助都将不胜感激 Xml Bean配置如下所示:Spring JdbcTemplate只应在调用其方法时建立连接,spring,datasource,jdbctemplate,Spring,Datasource,Jdbctemplate,我们遇到这样一种情况:一个位置1停机维护2天,无论何时调用位置2,它都会尝试连接到位置1,无论其是否被调用,都会获取超时和连接超时日志。是否有一种方法可以使jdbcTemplate仅在调用其方法之一时进行连接,而不注释任何代码。任何帮助都将不胜感激 Xml Bean配置如下所示: final String sql = someSql; try { if (location1 == location) { return jdbcTempla
final String sql = someSql;
try {
if (location1 == location) {
return jdbcTemplateLocation1.batchUpdate(sql, new BatchPreparedStatementSetter() {
// Some Code
}
@Override
public int getBatchSize() {
return list.size();
}
});
} else {
return jdbcTemplateLocation2.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(final PreparedStatement paramPreparedStatement, final int paramInt) throws SQLException {
// some code
}
@Override
public int getBatchSize() {
return dtoList.size();
}
});
}
} catch (final Exception e) {
// Log exception
}
${validationQuery}
真的
您是否尝试过在spring容器启动时不想立即初始化的bean上使用lazy init=“true”?您必须在数据源bean上使用此属性。当然,这种方法的问题是,如果您错误地配置了某些内容,那么直到应用程序运行时的晚些时候才能发现。或者,我猜这里有一种可能性是使用连接池而不是BasicDataSource,在启动容器时可以进行自定义以避免硬故障。您好@Kristofer,是的,我尝试过使用lazy init=“true”,但这种情况下的问题是,当调用location2时,它仍然试图建立位置1的连接,并导致超时和不必要的日志。
<alias name="dataSourceLocation1" alias="dataSourceLocation1" />
<bean id="dataSource" class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<property name="maxActive" value="${maxConnections}" />
<property name="maxIdle" value="${maxIdle}" />
<property name="maxWait" value="${connectionTimeoutInMs}" />
<property name="removeAbandoned" value="true" />
<property name="validationQuery">
<value>${validationQuery}</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>
<alias name="jdbcTemplateLocation1" alias="jdbcTemplateLocation1" />
<bean id="jdbcTemplateLocation1" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSourceLocation1" />
</bean>