spring配置 数据源datasource和连接池 的7种方式

1、spring-jdbc-DriverManagerDataSource

使用org.springframework.jdbc.datasource.DriverManagerDataSource 

说明:需要jar包:spring-jdbc.jar。DriverManagerDataSource只是新建连接,根本没有连接池的作用,不推荐使用

 
  1. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">

  2. <property name="driverClassName" value="${jdbc.driverClassName}" />

  3. <property name="url" value="${jdbc.url}"/>

  4. <property name="username" value="${jdbc.username}"/>

  5. <property name="password" value="${jdbc.password}"/>

  6. </bean>

2、spring-JNDI

使用org.springframework.jndi.JndiObjectFactoryBean 

说明:需要在web server中配置数据源,不方便于部署,如果使用高性能服务器WebLogic或Websphere,可以配置

 
  1. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

  2. <property name="jndiName" value="java:comp/env/jdbc/bbt"/>

  3. </bean>

3、apache-DBCP

使用org.apache.commons.dbcp.BasicDataSource 

说明:没有自动回收空闲连接的功能,没有连接池监控,高并发的压力下稳定性有所下降,hibernate已经放弃了DBCP

 
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

  2. <property name="driverClassName" value="${jdbc.driverClassName}"/>

  3. <property name="url" value="${jdbc.url}"/>

  4. <property name="username" value="${jdbc.username}"/>

  5. <property name="password" value="${jdbc.password}"/>

  6. <property name="initialSize" value="${jdbc.initialSize}"/>

  7. <property name="maxActive" value="${jdbc.maxActive}"/>

  8. <property name="maxIdle" value="${jdbc.maxIdle}"/>

  9. <property name="minIdle" value="${jdbc.minIdle}"/>

  10. <property name="maxWait" value="${jdbc.maxWait}"></property>

  11. <property name="maxOpenPreparedStatements" value="${jdbc.maxOpenPreparedStatements}" />

  12. </bean>

 

 

4、c3p0

使用com.mchange.v2.c3p0.ComboPooledDataSource

说明:需要jar包c3p0-0.9.5.1.jar

jdbc.properties

 
  1. driver=com.mysql.jdbc.Driver

  2. url=jdbc:mysql://127.0.0.1:3306/steamedbun?useUnicode=true&characterEncoding=UTF-8

  3. username=root

  4. password=root

  5.  
  6. #连接池初始化时创建的连接数

  7. c3p0.initialPoolSize=3

  8. #连接池中保留的最小连接数

  9. c3p0.minPoolSize=5

  10. #连接池中保留的最大连接数

  11. c3p0.maxPoolSize=100

  12. #连接池无空闲连接可用时,一次性创建的新连接数

  13. c3p0.acquireIncrement=3

  14. #最大空闲时间

  15. c3p0.maxIdleTime=60

  16. #每60秒检查所有连接池中的空闲连接

  17. c3p0.idleConnectionTestPeriod=60

  18. #连接池在获得新连接失败时重试的次数

  19. c3p0.acquireRetryAttempts=30

  20. #用以控制数据源内加载的PreparedStatements数量

  21. c3p0.maxStatements=100

  22. #c3p0是异步的,可以提升性能,通过多线程实现多个操作同时被执行

  23. c3p0.numHelperThreads=10

spring-mybatis.xml

 
  1. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">

  2. <property name="driverClassName" value="${driver}" />

  3. <property name="url" value="${url}" />

  4. <property name="username" value="${username}" />

  5. <property name="password" value="${password}" />

  6.  
  7. <property name="password" value="${c3p0.initialPoolSize}" />

  8. <property name="password" value="${c3p0.minPoolSize}" />

  9. <property name="password" value="${c3p0.maxPoolSize}" />

  10. <property name="password" value="${c3p0.acquireIncrement}" />

  11. <property name="password" value="${c3p0.maxIdleTime}" />

  12. <property name="password" value="${c3p0.idleConnectionTestPeriod}" />

  13. <property name="password" value="${c3p0.acquireRetryAttempts}" />

  14. <property name="password" value="${c3p0.maxStatements}" />

  15. <property name="password" value="${c3p0.numHelperThreads}" />

  16. </bean>

5、proxool使用的人比较少,有明显的性能问题,但由于它具备监控功能,因此建议在开发测试时使用

6、weblogic(oracle)的连接池和websphere(IBM)的连接池

7、alibaba druid(德鲁伊)连接池

说明:需要druid.jar,使用com.alibaba.druid.pool.DruidDataSource,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好

web.xml

 
  1. <servlet>

  2. <servlet-name>DruidStatView</servlet-name>

  3. <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>

  4. <init-param>

  5. <!-- 允许清空统计数据 -->

  6. <param-name>resetEnable</param-name>

  7. <param-value>true</param-value>

  8. </init-param>

  9. <init-param>

  10. <!-- 用户名 -->

  11. <param-name>loginUsername</param-name>

  12. <param-value>druid</param-value>

  13. </init-param>

  14. <init-param>

  15. <!-- 密码 -->

  16. <param-name>loginPassword</param-name>

  17. <param-value>druid</param-value>

  18. </init-param>

  19. </servlet>

  20. <servlet-mapping>

  21. <servlet-name>DruidStatView</servlet-name>

  22. <url-pattern>/druid/*</url-pattern>

  23. </servlet-mapping>

  24. <filter>

  25. <filter-name>druidWebStatFilter</filter-name>

  26. <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>

  27. <init-param>

  28. <param-name>exclusions</param-name>

  29. <param-value>/public/*,*.js,*.css,/druid*,*.jsp,*.swf</param-value>

  30. </init-param>

  31. <init-param>

  32. <param-name>principalSessionName</param-name>

  33. <param-value>sessionInfo</param-value>

  34. </init-param>

  35. <init-param>

  36. <param-name>profileEnable</param-name>

  37. <param-value>true</param-value>

  38. </init-param>

  39. </filter>

  40. <filter-mapping>

  41. <filter-name>druidWebStatFilter</filter-name>

  42. <url-pattern>/*</url-pattern>

  43. </filter-mapping>

spring-mybatis.xml

 
  1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">

  2. <property name="url" value="${db.master.url}" />

  3. <property name="username" value="${db.master.user}" />

  4. <property name="password" value="${db.master.password}" />

  5.  
  6. <property name="filters" value="mergeStat,wall,log4j2" /> <!-- 配置监控统计拦截的filters -->

  7. <property name="initialSize" value="5" />

  8. <property name="maxActive" value="100" />

  9. <property name="minIdle" value="10" />

  10. <property name="maxWait" value="60000" />

  11. <property name="validationQuery" value="SELECT 'x'" />

  12. <property name="testOnBorrow" value="true" />

  13. <property name="testOnReturn" value="true" />

  14. <property name="testWhileIdle" value="true" />

  15. <property name="timeBetweenEvictionRunsMillis" value="60000" />

  16. <property name="minEvictableIdleTimeMillis" value="300000" />

  17. <property name="removeAbandoned" value="true" />

  18. <property name="removeAbandonedTimeout" value="1800" />

  19. <property name="logAbandoned" value="true" />

  20. </bean>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: bonecp.driverClass=org.gjt.mm.mysql.Driver bonecp.jdbcUrl=jdbc:mysql://localhost/manytomany?useUnicode=true&characterEncoding=UTF-8 bonecp.username=root bonecp.password=2008 #分区数量 bonecp.partitionCount = 1 #每个分区含有的最小连接数 bonecp.minConnectionsPerPartition = 1 #每个分区含有的最大连接数 bonecp.maxConnectionsPerPartition = 2 #每次新增连接的数量 bonecp.acquireIncrement = 1 #连接池阀值,当 可用连接/最大连接 < 连接阀值 时,创建新的连接 bonecp.poolAvailabilityThreshold = 20 #连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的性能 bonecp.releaseHelperThreads = 0 #语句助手线程数,可设置为0,该参数会降低运行速度,但程序有大量的查询语句时,有助于提升高并发程序的性能 bonecp.statementReleaseHelperThreads = 0 #测试连接有效性的间隔时间,单位分钟 bonecp.idleConnectionTestPeriod = 60 #连接的空闲存活时间,当连接空闲时间大于该阀值时,清除该连接 bonecp.idleMaxAge = 240 #语句缓存个数,默认是0 bonecp.statementsCacheSize = 5 Spring中的配置信息 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:annotation-config /> <context:component-scan base-package="com.mvc" /> <mvc:annotation-driven /> <mvc:resources mapping="/resources/**" location="/resources/" /> <mvc:default-servlet-handler /> <aop:config proxy-target-class="true"/> <tx:annotation-driven transaction-manager="txManager"/> <!-- 采用单数据源事务控制方式,通过注解来定义事务--> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:proxool.properties</value> </property> </bean> <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close"> <property name="driver"> <value>org.gjt.mm.mysql.Driver</value> </property> <property name="driverUrl"> <value>jdbc:mysql://localhost/manytomany?useUnicode=true&characterEncoding=UTF-8</value> </property> <property name="user"> <value>root</value> </property> <property name="password"> <value>2008</value> </property> <property name="alias"> <value>Db_name</value> </property> <property name="houseKeepingSleepTime"> <value>90000</value> </property> <property name="prototypeCount"> <value>50</value> </property> <property name="maximumConnectionCount"> <value>50</value> </property> <property name="minimumConnectionCount"> <value>2</value> </property> <property name="trace"> <value>true</value> </property> <property name="verbose"> <value>true</value> </property> </bean> </beans>
dynamic-datasource-spring-boot-starter 是一个 Spring Boot 的数据源动态切换组件,可以方便地实现多数据源配置和切换。它支持常见的连接池,如 HikariCP、Tomcat JDBC 等。 以下是使用 dynamic-datasource-spring-boot-starter 配置连接池的步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.5.1</version> </dependency> ``` 2. 配置数据源 在 application.yml 文件中配置数据源,例如: ```yml spring: datasource: dynamic: primary: db1 datasource: db1: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root db2: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/db2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&failOverReadOnly=false&maxReconnects=10 username: root password: root ``` 此处配置了两个数据源 db1 和 db2,其中 db1 为主数据源。 3. 配置连接池 在 application.yml 文件中配置连接池,例如: ```yml spring: datasource: type: com.zaxxer.hikari.HikariDataSource hikari: maximum-pool-size: 10 minimum-idle: 5 idle-timeout: 60000 connection-timeout: 30000 auto-commit: true pool-name: HikariCP max-lifetime: 1800000 connection-test-query: SELECT 1 ``` 此处使用了 HikariCP 连接池配置连接池的一些参数,如最大连接数、最小空闲连接数、连接空闲超时时间等。 4. 注册数据源Spring Boot 启动类中注册数据源,例如: ```java @SpringBootApplication @MapperScan(basePackages = "com.example.mapper") public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean @ConfigurationProperties("spring.datasource.hikari") public DataSource dataSource() { return DataSourceBuilder.create().type(HikariDataSource.class).build(); } @Bean public DataSourceProvider dataSourceProvider(DataSource dataSource) { return new SingleDataSourceProvider(dataSource); } @Bean public DynamicDataSourceCreator dynamicDataSourceCreator(DataSourceProvider dataSourceProvider) { DynamicDataSourceCreator creator = new DynamicDataSourceCreator(); creator.setDataSourceProvider(dataSourceProvider); return creator; } @Bean public DynamicDataSourceRegister dynamicDataSourceRegister(DynamicDataSourceCreator dynamicDataSourceCreator) { DynamicDataSourceRegister register = new DynamicDataSourceRegister(); register.setDynamicDataSourceCreator(dynamicDataSourceCreator); return register; } } ``` 此处使用了 HikariCP 连接池,使用了 @ConfigurationProperties 注解将连接池配置读取到 DataSource 中,然后将 DataSource 注册到 DynamicDataSourceProvider 中,最后通过 DynamicDataSourceCreator 和 DynamicDataSourceRegister 将数据源注册到 Spring 中。 至此,我们已经完成了 dynamic-datasource-spring-boot-starter 的连接池配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值