Spring JdbcTemplate只应在调用其方法时建立连接

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

我们遇到这样一种情况:一个位置1停机维护2天,无论何时调用位置2,它都会尝试连接到位置1,无论其是否被调用,都会获取超时和连接超时日志。是否有一种方法可以使jdbcTemplate仅在调用其方法之一时进行连接,而不注释任何代码。任何帮助都将不胜感激

Xml Bean配置如下所示:

    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>