Datasource-Initialisierung beim start des Servers bis

Haben wir eine Anwendung, wo wir verwendet spring für IOC. Wir haben die dataSource-bean konfiguriert applicationContext.xml und dass ist auf die in anderen bean definations.

Die dataSource-bean-Begriff sieht wie folgt aus:

    <bean id="dbDataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url"
            value="jdbc:oracle:oci:@TESTDB" />
        <property name="username" value="TESTUSER" />
        <property name="password" value="TESTPWD" />
        <property name="initialSize" value="50" />
        <property name="maxActive" value="40" />
        <property name="maxIdle" value="10" />
        <property name="minIdle" value="10" />
        <property name="maxWait" value="-1" />
    </bean>
    <bean id="serviceDAO" class="com.test.impl.ServiceDAOImpl">
        <property name="dataSource" ref="dbDataSource" />
    </bean>

ServiceDAOImpl sieht wie folgt aus:

public class ServiceDAOImpl implements ServiceDAO {


    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public ValueObj readValue(String key) {

        String query = "SELECT * FROM SERVICE_LOOKUP WHERE KEY=?";
        /**
         * Implement the RowMapper callback interface
         */
        return (ValueObj) jdbcTemplate.queryForObject(query,
                new Object[] { key }, new RowMapper() {
                    public Object mapRow(ResultSet resultSet, int rowNum)
                            throws SQLException {
                        return new ValueObj(resultSet.getString("KEY"),
                                resultSet.getString("VALUE"));
                    }
                });
    }
    public ServiceDAOImpl() {

    }
}

Nun, auf der server-start-up Injektion geschieht Geldstrafe und, wenn wir die dataSource im serviceDAOImpl die Verbindung geschieht, ist in Ordnung. Aber das erste mal der Datenbank-Aufruf dauert es rund 3 Minuten erhalten Sie die Antwort zurück. Ich denke, das ist, weil der pool-Erstellung erfolgt während der erste Anruf und wir haben den parameter "initialSize" = 50 im applicationConext.xml.

So, um dies zu vermeiden, müssen wir einen Weg finden, in der der pool angelegt werden können, während der Start der Anwendung selbst und kann direkt verwendet werden.

Bitte vorschlagen. Lassen Sie mich wissen, wenn keine Klärung erforderlich.

Grüße
Saroj

  • der Frühling hat eifrig singleton-bean-Erzeugung/Initialisierung standardmäßig so ist der pool erstellt, wenn der Kontext Lesen und konfiguriert. Etwas anderes muss die Ursache der Verzögerung.
  • Hi Soulcheck, Vielen vielen Dank für die Antwort. Aber die ich getestet habe, den code mit initialSize parameter Wert 1 und die Zeit reduziert sich auf 6 Sek.
InformationsquelleAutor user1061771 | 2012-01-16
Schreibe einen Kommentar