【问题标题】:Connection pool replacement for already implemented Spring Jdbctemplate project已实现 Spring Jdbctemplate 项目的连接池替换
【发布时间】:2017-02-21 17:25:01
【问题描述】:

我正在做一个使用 spring jdbc 和 MsSQL 服务器的中型项目,项目几乎完成了 50%,现在当每个请求都对包含大量列和大型数据集的表进行大量插入和更新时,它们的性能非常好慢,有时显示连接已关闭。 现在我正在考虑集成 C3p0 或类似的连接池,但我无法更改我已经完成的任何 DAO 代码.. 我用 JDBCTemplate 变量实现了一个 DAOHelper 类,并在 applicationContext.xml 中注入了 JDBCTemplate 依赖项,并在控制器类中自动装配 DAOClass,我将此 DAOHelper 扩展到所有 DAO 类并使用此 jdbcTemplate 进行 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 或任何好的连接池库与我已经编写的代码集成。

【问题讨论】:

    标签: spring spring-data spring-jdbc c3p0 hikaricp


    【解决方案1】:

    只需在您的配置 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 2015-02-20
      • 2019-01-27
      • 2017-04-27
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      相关资源
      最近更新 更多