1

В одном из моих вопросов, заданных ранее, я узнал, что DriverManagerDataSource is NOT предназначенный для использования в производстве. Поэтому я изменил свою конфигурацию. Я знаю, что я использую ГСБД, который также устарел и много других пулов соединений доступны как HIkariCP и BOneCP ноКак проверить, установлен ли пул подключений в весеннем веб-приложении MVC?

Я желаю, чтобы понять способ, как проверить, что пул был настроен или нет?

На поиски много я получил некоторый ответ по следующей ссылке
How would you test a Connection Pool

, но я не получил способ проверки программно. Также я не могу отлаживать файлы jar, используемые для пула соединений, поскольку исходный код недоступен. Я не знаю, почему, но я не могу изменить свои баночки по официальным причинам.

Следующая моя конфигурация (OLD и NEW)

OLD

<bean id="webLogicXADataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="#[csa.db.driver]" /> 
     <property name="url" value="#[csa.db.url]" /> 
     <property name="username" value="#[csa.db.username]" /> 
     <property name="password" value="#[csa.db.password]" />  
    </bean> 

NEW Использование пула соединений ДБХП

<bean id="webLogicXADataSource" 
     class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="#[csa.db.driver]" /> 
     <property name="url" value="#[csa.db.url]" /> 
     <property name="username" value="#[csa.db.username]" /> 
     <property name="password" value="#[csa.db.password]" />  
    </bean> 

ДРУГОЕ ЭЛЕМЕНТЫ: (До сих пор я держал их так же, как они были раньше)

Место держатель

<bean id="placeholderConfig" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="locations"> 
      <list>    
       <value>file:${DB_PROPERTIES}</value>     
      </list> 
     </property> 
     <property name="placeholderPrefix" value="#[" /> 
     <property name="placeholderSuffix" value="]" /> 
    </bean> 

Менеджер транзакций

<bean id="transactionManager" 
     class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
     <property name="dataSource" ref="webLogicXADataSource" /> 
     <qualifier value="inventoryTxManager"/> 
    </bean> 

DAOIMP L ОБРАЗЕЦ БИН

<bean id="inventoryDao" 
     class="com.lxnx.fab.ce.icce.inventoryRoutingInvoice.dao.InventoryDaoImpl"> 
     <property name="dataSource" ref="webLogicXADataSource" /> 
     <property name="transactionManager" ref="transactionManager" /> 

Сейчас все классы DAO в моем проекте не синглтон (не комплект прототипа свойства для любого из бобов)

Ниже приведен пример Java код класс DAOImpl.java, где мне нужно сделать все операции:

DAOImpl.java

public class InventoryDaoImpl implements InventoryDao { 
    private final static ISmLog iSmLog = Instrumentation 
      .getSmLog(LNConstants.SYSTEM_LOG_NAME); 

    private JdbcTemplate jdbcTemplate; 

    private DataSource dataSource; 

    private PlatformTransactionManager transactionManager; 

    public void setDataSource(DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
     this.dataSource = dataSource; 
    } 

    public void setTransactionManager(
      PlatformTransactionManager transactionManager) { 
     this.transactionManager = transactionManager; 
    } 

@Transactional private void insertRelatedInfoData(
     InventoryModel inventoryModel) { 
      final List<String> relatedLniList = inventoryModel.getArrRelatedLni();     
      final String documentLni = inventoryModel.getDocumentLNI();   
      String sql = "INSERT INTO SCSMD_REPO.INV_RELATED_INFO(LNI, RELATED_LNI) VALUES(?,?)"; 
      jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { 
       @Override 
       public void setValues(PreparedStatement ps, int i) throws SQLException { 
        String relatedLni = relatedLniList.get(i); 
        ps.setString(1, documentLni); 
        ps.setString(2, relatedLni);    
       } 
       @Override 
       public int getBatchSize() { 
        return relatedLniList.size(); 
       } 
       }); 
    } 

} 

У меня нет ошибок. Просто хотел проверить Если пул был настроен, U хочет проверить то же самое

Все конфигурации в порядке или я что-то пропустил? Пожалуйста, помогите мне с вашими ценными ответами.спасибо

+0

Источником данных, который вы используете, является пул соединений, поэтому он настроен. –

+0

@ M.Deinum Эй. Не могли бы вы рассказать мне, как я могу проверить то же самое в режиме реального времени? –

+0

Пожалуйста, проверьте журналы для вашего приложения. Пул соединений будет загружен при загрузке менеджера баз данных. – KayV

ответ

1

Если у вас нет доступа к журналам, вы не можете его проверить. однако есть еще одна логика осла.

Каждый сервер базы данных будет иметь тайм-аут. если db не попадает в приложение после некоторого времени, соединение будет ломаться. например, сервер mysql будет разорвать его соединение с приложением после 8 hour (если нет приложения из приложения). вы проверяете изменение тайм-аута на минимальное время (скажем, 30 минут) в файле конфигурации mysql и проверяете после 30 minute с вы получаете закрытие связи закрытия в вас, когда вы нажимаете db

1

Самый простой способ, как объяснялось, - изучить журналы. Вполне вероятно, что пул соединений будет регистрировать что-то, по крайней мере, если уровень ведения журнала достаточно низкий.

Другой способ - изучить класс Connection, возвращаемый источником данных. Если вы имеете дело с пулом соединений, класс будет оболочкой или прокси-классом для этого пула. Класс wrapper/proxy гарантирует, что при вызове close() соединение действительно не закрыто, оно просто возвращается в пул для дальнейшего использования. Например, если вы использовали HikariCP в качестве пула, вы можете проверить if(connection instanceof IHikariConnectionProxy), чтобы узнать, используется ли пул.

Добавление такого кода в ваше программное обеспечение будет плохой идеей практически во всех случаях. Если вы не знаете, используется ли пул подключений или нет, это не то, что вы решаете с помощью кода. Это то, что вы решаете, читая и изучая больше.

Вы также назвали свой bean-компонент webLogicXADataSource, хотя ничто, кажется, не поддерживает его как источник данных XA. Возможно, вы работаете над вещами, которые слишком продвинуты для вас?

+0

Ровно, вещи довольно сложная для меня никогда не работал раньше на XA источники данных только журнал сообщений я получаю '06: 26: 53,668 (03/21) INFO APP: Установка datasource' ли что прекрасный бассейн был создан? –

+0

Я, конечно, не доверял бы этому. Это также может указывать на то, что ваш журнал не настроен правильно. – Kayaman

+0

Я использую logging api, который является видом оболочки для log4j и Теперь я просто хотел подтвердить, будет ли соединение автоматически возвращаться в пул в этом сценарии или нет? Так как я ничего не делаю для того же? –

Смежные вопросы