Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 连接池简化内存中的数据库测试+;哪个泳池图书馆_Spring_Testing_Connection_Pool - Fatal编程技术网

Spring 连接池简化内存中的数据库测试+;哪个泳池图书馆

Spring 连接池简化内存中的数据库测试+;哪个泳池图书馆,spring,testing,connection,pool,Spring,Testing,Connection,Pool,我正在从事一个包含多个maven模块(域、API和客户端)的项目 API仅依赖于域,客户端仅依赖于API 我还有2台tomcat服务器(开发和发布)。现在,我很难在需要部署到relase时始终手动更改连接字符串。现在我听到了连接池(DBCP、C3PO和一个新的HikariCP)的消息,所以我正在考虑使用它 现在我还听说Spring框架可以通过依赖注入来帮助我配置数据源 问题是: 我应该使用上面哪一个(Spring或纯连接池库或两者) 还要记住,我希望通过内存中的数据存储(HSQLDB)促进测试

我正在从事一个包含多个maven模块(域、API和客户端)的项目 API仅依赖于域,客户端仅依赖于API 我还有2台tomcat服务器(开发和发布)。现在,我很难在需要部署到relase时始终手动更改连接字符串。现在我听到了连接池(DBCP、C3PO和一个新的HikariCP)的消息,所以我正在考虑使用它

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

问题是: 我应该使用上面哪一个(Spring或纯连接池库或两者)

还要记住,我希望通过内存中的数据存储(HSQLDB)促进测试 我可以有一个配置文件,用于保存MySQL服务器(localhost或release)连接的配置

如何在内存数据库(HSQLDB)和本地MySQL服务器之间互换使用DBUnit测试

编辑:忘了这个吧

编辑2:

现在,我的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>

${dev.url}
${dev.user}
${dev.password}
${dev.portNumber}
${release.url}
${release.user}
${release.password}
${release.portNumber}
如果在父bean中定义dataSourceClassName属性,则会出现错误 此外,我不能在父bean上使用destroy方法(我不知道是否需要它)

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


现在我可以将我的HSQLDB in memory DB添加到列表中进行测试了?

我是的开发人员之一。几乎所有的连接池都应该允许您执行您正在尝试执行的操作。您只需要在属性文件中配置连接和池,每个数据库一个,以及交换它们的方法——可能通过系统属性。例如:

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,您甚至可以将系统属性设置为MySQL配置的默认值,因此如果未指定
db.propfile
属性,它将使用该属性:

System.getProperty("db.propfile", "mysql.properties")
如果部署在战争中,可能需要使路径相对。例如,相对于WEB-INF:

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

也许是个愚蠢的问题,但是你把db.prop文件放在哪里?System.getProperty总是得到一个空值(我只是在一个简单的maven应用程序中测试这个值),我已经在应用程序的根目录下设置了它,但是没有找到它。如果
System.getProperty(“db.propfile”)
返回空值,那么在应用程序启动时它就没有被正确传递。正常的Java调用类似于
Java-Ddb.propfile=mysql.properties-jarapplication.jar
。您是否使用像dbunit插件这样的maven插件来执行测试?在这种情况下,您可以检查它是否接受系统属性,如。如果应用程序运行在可以热部署或重新启动而无需关闭容器的环境中,则销毁数据源/池通常是一个好主意。在这种情况下,调用shutdown()失败可能导致内存泄漏,因为不允许对上下文类加载器加载的类进行垃圾收集。但是,如果容器随应用程序一起关闭,则严格来说并不需要。