我正在研究一个包括多个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"));