gpt4 book ai didi

sql - 使用 HSQLDB 和 Spring 嵌入式数据库启用连接池

转载 作者:行者123 更新时间:2023-12-01 18:00:17 26 4
gpt4 key购买 nike

最近,我一直在尝试为我们在生产中使用 Oracle DB 的应用程序之一实现基于 HSQLDB 的内存数据库。该应用程序使用spring框架。但是,我必须以编程方式实现数据源 bean,因为我们正在使用现有的 SQL DDL 语句(Oracle 查询),因此必须以编程方式删除 namespace 等结构,然后才能在 HSQLDB 上运行。

我使用 EmbeddedDatabaseBuilder(ResourceLoader) 初始化数据库。

现在我的问题是我现在想使用 c3p0 添加连接池。通常我会使用

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="HSQLDB driver path" /> (this is just for representation)
<property name="jdbcUrl" value="${xxx.jdbcUrl}" />
<property name="user" value="${xxx.username}" />
<property name="password" value="${xxx.password}" />
<property name="minPoolSize" value="1" />
<property name="maxPoolSize" value="3" />
<property name="maxIdleTime" value="20" />
</bean>

但是,我很困惑如何在使用 Spring 嵌入式数据库时定义它。

免责声明:我对 Spring 还很陌生。

最佳答案

关注此link :

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
public static ComboPooledDataSource newDefaultDS() {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize(1);
dataSource.setMaxPoolSize(1);
dataSource.setMaxIdleTime(20);

return dataSource;
}
}

import java.beans.PropertyVetoException;
import java.sql.Driver;

import org.springframework.jdbc.datasource.embedded.ConnectionProperties;
import org.springframework.jdbc.datasource.embedded.DataSourceFactory;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ComboPoolDataSourceFactory implements DataSourceFactory,
ConnectionProperties {
private final ComboPooledDataSource dataSource;

public ComboPoolDataSourceFactory() {
this(C3P0Utils.newDefaultDS());
}

public ComboPoolDataSourceFactory(ComboPooledDataSource dataSource) {
assert dataSource != null;
this.dataSource = dataSource;
}

public ConnectionProperties getConnectionProperties() {
return this;
}

public ComboPooledDataSource getDataSource() {
return dataSource;
}

public void setUsername(String username) {
dataSource.setUser(username);
}

public void setPassword(String password) {
dataSource.setPassword(password);
}

public void setUrl(String url) {
dataSource.setJdbcUrl(url);
}

public void setDriverClass(Class<? extends Driver> driverClass) {
try {
dataSource.setDriverClass(driverClass.getName());
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
}

import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;

public class EmbeddedC3P0DatabaseBuilder extends EmbeddedDatabaseBuilder {
public EmbeddedC3P0DatabaseBuilder() {
setDataSourceFactory(new ComboPoolDataSourceFactory());
}
}

还有一个简短的用法示例:

EmbeddedC3P0DatabaseBuilder builder = new EmbeddedC3P0DatabaseBuilder();
EmbeddedDatabase db = builder
.setType(EmbeddedDatabaseType.H2)
.addScript("setup-tables.sql")
.build();

JdbcTemplate template = new JdbcTemplate(db);
....
db.shutdown();

关于sql - 使用 HSQLDB 和 Spring 嵌入式数据库启用连接池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998727/

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