我使用Spring在Application.java中配置Connection 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;
}
在我的控制器中,我自动连接此连接。 同样在我的控制器中,我调度了以一定时间间隔运行的方法,并使用此自动有线连接获取数据。 我的问题是: 如何在已调度的方法中关闭连接,因为当我关闭连接时,下次运行调度的方法时,连接为空。如果连接为空,我该如何重试连接。
解决这个问题的正确策略是什么?
答案 0 :(得分:1)
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介绍了如何设置生产就绪的C3P0
和DBCP
数据库连接池。直接从上述文档引用:
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"/>