连接池以简化内存数据库测试 哪个池库



我正在研究一个包括多个Maven模块(域,API和客户端)的项目API仅取决于域,客户端仅取决于API我也有2个Tomcat服务器(开发和发布)。现在,我很难在需要部署到relase时始终手动更改连接字符串。现在,我从Connection Pooling(DBCP,C3PO和一个新的Hikaricp)中听说过,所以我正在寻找它来吸引使用。

现在,我还听说春季框架可以通过依赖注入来帮助我,以帮助配置数据源。

问题:我应该使用上述哪个(弹簧或纯连接池库或两者)?

还要记住,我想通过内存数据存储(HSQLDB)来促进测试我可以拥有一个配置文件,只是为了持有连接到MySQL Server(Local -Host或Release)

如何在内存DB(HSQLDB)和我的本地MySQL Server之间互换使用DBunit测试?

编辑:忘记这个

edit2:

现在我在我的applicationContext.xml中有一个:

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:datasource.properties" />
</bean> 
<bean id="parentDataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="maximumPoolSize" value="20" />
    <property name="minimumPoolSize" value="1" />
</bean>
<bean id="developmentDataSource" parent="parentDataSource">
    <constructor-arg>
        <bean class="com.zaxxer.hikari.HikariConfig">
            <constructor-arg>
                <props>
                    <prop key="dataSource.url">${dev.url}</prop>
                    <prop key="dataSource.user">${dev.user}</prop>
                    <prop key="dataSource.password">${dev.password}</prop>
                    <prop key="dataSource.portNumber">${dev.portNumber}</prop>
                </props>
            </constructor-arg>
            <property name="dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        </bean>
    </constructor-arg>
</bean>
<bean id="releaseDataSource" parent="parentDataSource">
    <constructor-arg>
        <bean class="com.zaxxer.hikari.HikariConfig">
            <constructor-arg>
                <props>
                    <prop key="dataSource.url">${release.url}</prop>
                    <prop key="dataSource.user">${release.user}</prop>
                    <prop key="dataSource.password">${release.password}</prop>
                    <prop key="dataSource.portNumber">${release.portNumber}</prop>
                </props>
            </constructor-arg>
            <property name="dataSourceClassName" value="com.mysql.jdbc.jdbc2.optional.MysqlDataSource" />
        </bean>
    </constructor-arg>
</bean>

如果我在父bean中定义了datasourceclassname属性,我会遇到错误另外,我不能使用父豆上的销毁方法(我不知道我是否需要它)

您可以添加的任何内容以使其更能更好地使用

现在,我可以将我的HSQLDB添加到内存DB中的列表中以进行测试?

我是Hikaricp的开发人员之一。几乎所有连接池都应该让您做自己想做的事情。您只需要在属性文件中的连接和池配置,每个数据库一个,以及一种可以通过系统属性交换它们的方法。例如:

HikariConfig config = new HikariConfig(System.getProperty("db.propfile"));
HikariDataSource ds = new HikariDataSource(config);

,然后简单地使用-Ddb.propfile=mysql.properties-Ddb.propfile=hsqldb.properties启动。另外,您可以使用诸如Spring之类的东西,尽管使Spring配置动态可能会更棘手 - 除非您以类似的方式交换Spring配置文件。

编辑:如果您在生产中使用MySQL运行,并且在测试中使用HSQLDB,您甚至可以将System属性默认为MySQL配置,因此,如果未指定db.propfile属性,则使用:

System.getProperty("db.propfile", "mysql.properties")

如果您部署在战争中,则可能需要制定相对的路径。例如,相对于Web-Inf:

HikariConfig config = new HikariConfig("./WEB-INF/" + System.getProperty("db.propfile"));

最新更新