Ich habe ein Problem in meinem Spring MVC JDBC Anruf. Wenn ich den Aufruf nach dem Starten des Servers schnell mache, wird die JDBC-Verbindung in einer Sekunde hergestellt und die Daten werden abgerufen. Wenn die anderen DAOs in schneller Folge miteinander verbunden werden, wird in ähnlicher Weise die Verbindung hergestellt. Aber wenn ich versuche, ein DAO nach einer Lücke von nur wenigen Minuten aufzurufen, dauert die JDBC-Verbindung ewig. Es wird aufJDBC Verbindung dauert zu lange
stecken„DataSourceUtils: 110 - Fetching JDBC-Verbindung von Datasource“
Ich habe noch nie die Geduld wirklich überprüfen hatte, wie lange es die Verbindung zum Abrufen nimmt aber ich habe gewartet 10 Minuten und es gab keine Anzeichen dafür, dass die Verbindung hergestellt wurde.
Als nächstes versuche ich den Server zumindest neu zu starten. Aber JDBC behindert sogar das Anhalten des Servers !! Die Konsole ist auf dieser Linie fest:
„DisposableBeanAdapter: 327 - Methode aufrufen zerstören‚close‘auf Bohne mit dem Namen‚datasource‘“
Schließlich starte ich Eclipse und es funktioniert gut, bis es wieder eine Zeitlücke.
Diese meine Bohne Definition für die Datenquelle ist:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="url" />
<property name="username" value="abc" />
<property name="password" value="abc" />
<property name="validationQuery" value="SELECT 1" />
<property name="testWhileIdle" value="true" />
<property name="maxActive" value="100" />
<property name="minIdle" value="10" />
<property name="initialSize" value="10" />
<property name="maxIdle" value="20" />
<property name="maxWait" value="1000" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="getDataDao" class="com.project.dao.GetDataDao">
<constructor-arg index="0" ref="jdbcTemplate" />
<constructor-arg index="1" value="STORED_PROC_NAME"></constructor-arg>
</bean>
In meiner DAO-Datei, erweitere ich StoredProcedure Klasse Frühling und dies ist der Konstruktor:
public GetDataDao(JdbcTemplate jdbcTemplate, String spName) {
super(jdbcTemplate, spName);
declareParameter(new SqlParameter("p_input", Types.VARCHAR));
declareParameter(new SqlOutParameter("o_result", Types.VARCHAR));
compile();
}
In einer anderen Funktion, das ist wie nenne ich die SP:
spOutput = super.execute(spInput);
wo spOutput
und spInput
sind HashMaps.
Mache ich etwas falsch in meiner Konfiguration? TIA.
Nicht in Ihrer Konfiguration, vermute ich in Ihrem Code ... Erhalten Sie keine Verbindungen selbst und verwenden Sie federgeführte Transaktionen. Wenn Ihr Pool nicht mehr verfügbar sein wird, werden Ihnen eventuell die verfügbaren Verbindungen ausgehen.In Ihrem Fall nach etwa 100 Anfragen (es sei denn, Sie haben MySQL so konfiguriert, dass diese Verbindungen nicht zugelassen werden). –
Eclipse hat damit nichts zu tun. Ich verstehe nie, warum Leute ihre IDE erwähnen, wenn sie Probleme haben. Spring macht das in meinen Apps jeden Tag richtig. Es ist etwas in deinem Code. – duffymo
Ändern Sie Ihre Frage und senden Sie den Code, wo Sie die Verbindung erhalten und verwenden. – kaliatech