gpt4 book ai didi

java - 如何验证Spring MVC Web应用程序中是否已设置连接池?

转载 作者:行者123 更新时间:2023-11-30 02:47:03 24 4
gpt4 key购买 nike

在我之前提出的一个问题中,我了解到 DriverManagerDataSource 用于生产用途。所以我改变了我的配置。我知道我使用的是 DBCP,它也已经过时了,并且还有很多其他连接池可用,例如 HIkariCP 和 BOneCP,但是

I wish to understand the way how to verify that a pool has been setup or not?

经过大量搜索,我在以下链接中得到了一些答案
How would you test a Connection Pool

但我没有找到以编程方式验证的方法。另外,我无法调试用于连接池的 jar 文件,因为没有可用的源代码。我不知道为什么,但由于官方原因我无法更改我的 jar 。

以下是我的配置(旧的和新的)

<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>

使用DBCP连接池

<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>

其他元素:(到目前为止,我一直保持它们与之前一样)

Place holder

<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>

Transaction Manager

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

DAOIMPL SAMPLE BEAN

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

现在我项目中的所有 DAO 类都是单例的(没有为任何 bean 设置原型(prototype)属性)

以下是 DAOImpl.java 类的示例 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();
}
});
}

}

我没有收到任何错误。只是想验证是否已设置池您希望验证相同

所有配置都很好还是我错过了什么?请帮助我提供宝贵的答案。谢谢

最佳答案

如果您没有启用日志,则无法验证它。然而,还有一种驴子逻辑。

每个数据库服务器都会有超时功能。如果数据库在一段时间后没有被应用程序命中,连接就会中断。例如,mysql 服务器将在8 小时后断开与应用程序的连接(如果应用程序没有命中)。您检查将mysql配置文件中的超时修改为最短时间(例如30分钟),并在30分钟后检查,当您点击db时,您的应用程序中出现连接关闭异常

关于java - 如何验证Spring MVC Web应用程序中是否已设置连接池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39913123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com