BoneCP 与 Spring 集成

下面将通过一个简单示例演示 BoneCP 和 Spring 集成,通过 JdbcTemplate 从 MySQL 5.7.* 中获取数据库时间戳。

Maven 依赖

下面是示例的 Maven 依赖,直接将其复制到 pom.xml 即可。内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.hxstrive.jdbc_pool</groupId>
   <artifactId>bonecp_spring</artifactId>
   <version>1.0-SNAPSHOT</version>

   <dependencies>
       <!-- https://mvnrepository.com/artifact/com.jolbox/bonecp -->
       <dependency>
           <groupId>com.jolbox</groupId>
           <artifactId>bonecp</artifactId>
           <version>0.8.0.RELEASE</version>
       </dependency>

       <!-- Spring 上下文依赖 -->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>5.3.22</version>
       </dependency>

       <!-- JdbcTemplate 依赖 -->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-jdbc</artifactId>
           <version>5.3.22</version>
       </dependency>

       <!-- 数据库驱动依赖 -->
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.1.38</version>
       </dependency>
   </dependencies>

</project>

Spring 配置

在项目的 resources 目录下创建一个 application-context.xml 配置文件,用来定义 Spring 的 Bean,分别配置数据源 com.jolbox.bonecp.BoneCPDataSource 和 org.springframework.jdbc.core.JdbcTemplate,后续代码我们将使用 JdbcTemplate 来操作数据库。配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">
   <!-- 配置数据源 -->
   <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
       <!-- 数据库驱动 -->
       <property name="driverClass" value="com.mysql.jdbc.Driver" />
       <!-- 相应驱动的jdbcUrl,你懂的 -->
       <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useSSL=false" />
       <!-- 数据库的用户名 -->
       <property name="username" value="root" />
       <!-- 数据库的密码 -->
       <property name="password" value="aaaaaa" />
       <!-- 每个分区最大的连接数 -->
       <property name="maxConnectionsPerPartition" value="200" />
       <!-- 每个分区最小的连接数 -->
       <property name="minConnectionsPerPartition" value="5" />
       <!-- 分区数 ,默认值2,最小1,推荐3-4,视应用而定-->
       <property name="partitionCount" value="4" />
       <!-- 每次去拿数据库连接的时候一次性要拿几个,默认值:2 -->
       <property name="acquireIncrement" value="2" />
       <!-- 缓存prepared statements的大小,默认值:0 -->
       <property name="statementsCacheSize" value="10" />
   </bean>

   <!-- 配置 JdbcTemplate -->
   <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
       <!-- 引用数据源 -->
       <property name="dataSource" ref="dataSource" />
   </bean>

</beans>

源 com.jolbox.bonecp.BoneCPDataSource 还支持一些其他的配置选项,它们包括:

  • connectionTestStatement:在做keep-alive的时候的SQL语句。  

  • statementsCachedPerConnection:No of statements that can be cached per connection,反正源码中不推荐使用,就别用了.  

  • initSQL: 在每次到数据库取连接的时候执行的SQL语句,只执行一次。  

  • closeConnectionWatch:如果设置为true,则会增加一个线程监控关闭连接时的情况,如果关闭时出现异常,则打出错误日志,主要用于debug。上线后记得关掉。  

  • logStatementsEnabled:如果设置为true,就会打印执行的SQL语句,如果你用了其他能打印SQL语句的框架,那就不必了。  

  • acquireRetryDelay:在获取连接失败后,第二次参试前的延迟时间,默认为7000毫秒。  

  • acquireRetryAttempts:在获取连接失败后的重试次数,默认为5次。  

  • lazyInit:如果设置为true,那么连接池不会自动创建最小连接数的链接,而是保持为空,直到有需求要获取连接。  

  • transactionRecoveryEnabled:如果设置为true,则会保存该链接上的所有活动,以备下次重试的时候使用,这里指的活动是数据库操作。  

  • connectionHookClassName:Connection hook class name.没看懂…  

  • poolName:上面特性中说到的自定义连接池名称。  

  • disableJMX:控制JMX的支持开关。  

  • connectionTimeout:获取连接的时候最大的等待时间,默认值为:Long.MAX_VALUE  

客户端

万事俱备只欠东风,下面我们将给出一个简单的客户端来使用 JdbcTemplate,代码如下:

package com.hxstrive.jdbc_pool.bonecp;


import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.Timestamp;

/**
* 配置 BoneCP 为 JdbcTemplate 的数据源,利用 JdbcTemplate 获取数据库当前时间戳。
* @author hxstrive.com
*/
public class BoneCpHello {

   public static void main(String[] args) {
       // 1.从 classpath 中加载配置文件
       ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
               "application-context.xml");
               
       // 2.获取 JdbcTemplate 实例 Bean
       JdbcTemplate jdbcTemplate = applicationContext.getBean(JdbcTemplate.class);
       System.out.println("jdbcTemplate = " + jdbcTemplate);

       // 3.获取数据库当前的时间戳
       Timestamp ts = jdbcTemplate.queryForObject("select CURRENT_TIMESTAMP() as ct", Timestamp.class);
       System.out.println(ts);
   }

}

运行客户端,输出如下:

jdbcTemplate = org.springframework.jdbc.core.JdbcTemplate@5c072e3f
2023-07-03 12:27:29.0
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号