У меня проблема в моем вызове JCBC Spring MVC. Если я быстро сделаю вызов после запуска сервера, соединение JDBC будет выполнено за секунду и данные будут восстановлены. Аналогично, если другие DAO вызываются быстро друг с другом, соединение выполняется в ближайшее время. Но если я попытаюсь позвонить в DAO после разрыва даже на несколько минут, соединение JDBC навсегда будет выполнено. Он застревает наСоединение JDBC слишком длинное
«DataSourceUtils: 110 - Fetching JDBC Connection из DataSource»
Я никогда не хватало терпения, чтобы действительно проверить, сколько времени требуется, чтобы получить соединение, но я ждал 10 минут, и не было никаких признаков подключения.
Далее я пытаюсь перезагрузить сервер как минимум. Но JDBC препятствует даже остановке сервера! Консоль застрял на этой линии:
«DisposableBeanAdapter: 327 - Вызов уничтожить метод„закрыть“на боб с именем" DataSource»
В конце концов я перезапустить Eclipse, и она работает хорошо до тех пор, пока промежуток времени снова.
Это мое определение компонента для источника данных:
<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>
В моем файле DAO, я расширить класс StoredProcedure Spring, и это является конструктор:
public GetDataDao(JdbcTemplate jdbcTemplate, String spName) {
super(jdbcTemplate, spName);
declareParameter(new SqlParameter("p_input", Types.VARCHAR));
declareParameter(new SqlOutParameter("o_result", Types.VARCHAR));
compile();
}
В другой функции, это как я называю SP:
spOutput = super.execute(spInput);
где spOutput
и spInput
- это HashMaps.
Я что-то не так в своей конфигурации? ТИА.
Не в вашей конфигурации, я подозреваю, что в вашем коде ... Не подключайтесь сами и используйте транзакции, управляемые весной. Если yuo, ваш пул не будет исчерпан доступными соединениями.В вашем случае после примерно 100 запросов (если вы не настроили MySQL, чтобы запретить эти подключения). –
Eclipse не имеет к этому никакого отношения. Я никогда не понимаю, почему люди упоминают их IDE, когда у них проблемы. Spring делает это правильно каждый день в моих приложениях; это что-то в вашем коде. – duffymo
Измените свой вопрос и опубликуйте код, где вы получаете и используете соединение. – kaliatech