已实施 Spring Jdbctemplate 项目的连接池替换
Connection pool replacement for already implemented Spring Jdbctemplate project
我正在用 spring jdbc 和 MsSQL 服务器做一个中型项目,项目几乎完成了 50%,现在当每个请求都对那些表进行大量插入和更新时包含很多列和大型数据集执行速度非常慢,有时显示连接已关闭。
现在我正在考虑集成 C3p0 或类似的连接池,但我无法更改我已经完成的任何 DAO 代码。
我用 JDBCTemplate 变量实现了一个 DAOHelper class 并在 applicationContext.xml 中注入 JDBCTemplate 依赖,并在控制器 class 中自动装配 DAOClass,我扩展了这个 DAOHelper所有 DAO classes 并使用此 jdbc 模板执行 JDBC 操作。
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://192.168.1.101:1433;databaseName=OrderManager"/>
<property name="username" value="sa"/>
<property name="password" value="520759"/>
</bean>
<bean id="JdbcDataSource" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"/>
</bean>
<bean id="OrderDAO" class="com.ordermanager.order.dao.OrderDAO" >
<property name="jdbcTemplate" ref="JdbcDataSource"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
@Controller
public class OrderController {
@Autowired
OrderDAO orderDAO;
@RequestMapping(value = "/addNewItem", method = RequestMethod.GET)
public ModelAndView addItem(@RequestParam("ParamData") JSONObject paramJson) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(ConstantContainer.Application_Context_File_Path);
OrderDAO orderDAO = (OrderDAO) ctx.getBean("OrderDAO");
return new ModelAndView("MakeResponse", "responseValue", orderDAO.addItem(paramJson));
}
public class DAOHelper {
private JdbcTemplate jdbcTemplate;
private PlatformTransactionManager transactionManager;
public PlatformTransactionManager getTransactionManager() {
return transactionManager;
}
public void setTransactionManager(PlatformTransactionManager txManager) {
this.transactionManager = txManager;
}
public JdbcTemplate getJdbcTemplate() /*I am using this Method for all JDBC Task*/ {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
现在只需最少的代码更改,我如何将 C3p0 或任何好的连接池库与我已经编写的代码集成。
只需将配置 xml 中的 ds bean 更改为以下内容,并考虑根据您自己的添加其他 c3p0 属性。确保你的类路径中有 c3p0 jar。
<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="jdbcUrl" value="jdbc:sqlserver://192.168.1.101:1433;databaseName=OrderManager" />
<property name="user" value="sa" />
<property name="password" value="520789" />
</bean>
我正在用 spring jdbc 和 MsSQL 服务器做一个中型项目,项目几乎完成了 50%,现在当每个请求都对那些表进行大量插入和更新时包含很多列和大型数据集执行速度非常慢,有时显示连接已关闭。 现在我正在考虑集成 C3p0 或类似的连接池,但我无法更改我已经完成的任何 DAO 代码。 我用 JDBCTemplate 变量实现了一个 DAOHelper class 并在 applicationContext.xml 中注入 JDBCTemplate 依赖,并在控制器 class 中自动装配 DAOClass,我扩展了这个 DAOHelper所有 DAO classes 并使用此 jdbc 模板执行 JDBC 操作。
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url" value="jdbc:sqlserver://192.168.1.101:1433;databaseName=OrderManager"/>
<property name="username" value="sa"/>
<property name="password" value="520759"/>
</bean>
<bean id="JdbcDataSource" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"/>
</bean>
<bean id="OrderDAO" class="com.ordermanager.order.dao.OrderDAO" >
<property name="jdbcTemplate" ref="JdbcDataSource"/>
<property name="transactionManager" ref="transactionManager"/>
</bean>
@Controller
public class OrderController {
@Autowired
OrderDAO orderDAO;
@RequestMapping(value = "/addNewItem", method = RequestMethod.GET)
public ModelAndView addItem(@RequestParam("ParamData") JSONObject paramJson) {
ApplicationContext ctx = new FileSystemXmlApplicationContext(ConstantContainer.Application_Context_File_Path);
OrderDAO orderDAO = (OrderDAO) ctx.getBean("OrderDAO");
return new ModelAndView("MakeResponse", "responseValue", orderDAO.addItem(paramJson));
}
public class DAOHelper {
private JdbcTemplate jdbcTemplate;
private PlatformTransactionManager transactionManager;
public PlatformTransactionManager getTransactionManager() {
return transactionManager;
}
public void setTransactionManager(PlatformTransactionManager txManager) {
this.transactionManager = txManager;
}
public JdbcTemplate getJdbcTemplate() /*I am using this Method for all JDBC Task*/ {
return jdbcTemplate;
}
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
现在只需最少的代码更改,我如何将 C3p0 或任何好的连接池库与我已经编写的代码集成。
只需将配置 xml 中的 ds bean 更改为以下内容,并考虑根据您自己的添加其他 c3p0 属性。确保你的类路径中有 c3p0 jar。
<bean id="ds" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="jdbcUrl" value="jdbc:sqlserver://192.168.1.101:1433;databaseName=OrderManager" />
<property name="user" value="sa" />
<property name="password" value="520789" />
</bean>