gpt4 book ai didi

java - 重试失败的 JDBC 连接

转载 作者:行者123 更新时间:2023-11-30 07:01:31 26 4
gpt4 key购买 nike

我使用 Spring 在 Application.java 中配置连接 bean,如下所示:

@Bean
public Connection getConnection(
@Value("${sqlserver.host}") String host,
@Value("${sqlserver.user}") String user,
@Value("${sqlserver.password}") String password,
@Value("${sqlserver.dbname}") String dbname){
try {
return DriverManager.getConnection(String.format("jdbc:jtds:sqlserver://%s:1433;instance=MSSQLSERVER;DatabaseName=%s", host, dbname), user, password);
}catch(Exception ex){
System.out.println(ex.getMessage());
}

return null;
}

在我的 Controller 中,我自动连接此连接。同样在我的 Controller 中,我安排了按时间间隔运行的方法,它们使用此自动有线连接来获取数据。我的问题是:我该如何关闭计划方法中的连接,因为当我关闭连接时,下次运行计划方法时,连接为空。如果连接为空,我该如何重试连接。

解决这个问题的正确策略是什么?

最佳答案

Spring 提供了一个非常基本的 SingleConnectionDataSource that wraps a single Connection that is not closed after each use根据文档。在同一文档中还提到这主要是一个测试类。遵循您的方法签名

@Bean
public DataSource dataSource(
@Value("${sqlserver.host}") String host,
@Value("${sqlserver.user}") String user,
@Value("${sqlserver.password}") String password,
@Value("${sqlserver.dbname}") String dbname)) {

SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
dataSource.setSuppressClose(true);
dataSource.setUrl(String.format("jdbc:jtds:sqlserver://%s:1433;instance=MSSQLSERVER;DatabaseName=%s", host, dbname));
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}

There is a dedicated section in the Documentation它介绍了如何设置生产就绪的 C3P0DBCP DB 连接池。直接引用上述文档:

DBCP 配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<context:property-placeholder location="jdbc.properties"/>

C3P0 配置:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>

<context:property-placeholder location="jdbc.properties"/>

关于java - 重试失败的 JDBC 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40852449/

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