廖雪峰Java15JDBC编程-3JDBC接口-5JDBC连接池
发布时间:2020-12-15 07:51:57 所属栏目:Java 来源:网络整理
导读:1. JDBC连接池 1.1 JDBC连接池简介 线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销。 同样JDBC可以复用一个JDBC连接 JDBC的连接池可以维护若干个JDBC连接,在执行数据库任务的时候,可以从连接池中直接获
1. JDBC连接池1.1 JDBC连接池简介线程池可以复用一个线程,这样大量的小任务通过线程池的线程执行,就可以避免反复创建线程带来的开销。 同样JDBC可以复用一个JDBC连接 JDBC的连接池可以维护若干个JDBC连接,在执行数据库任务的时候,可以从连接池中直接获取连接,而不是反复创建和关闭JDBC连接 1.2 JDBC连接池接口:
1.3 以HiKariCP为例导入依赖 <!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.3.1</version> </dependency> 演示代码 HikariConfig config = new HikariConfig(); config.setJdbcUrl("jdbc:mysql://localhost:3306/test"); config.setUsername("root"); config.setPassword("password"); config.addDataSourceProperty("connectionTimeout","1000"); //连接超时1秒 config.addDataSourceProperty("idleTimeout","60000"); //空闲连接60秒 config.addDataSourceProperty("maximumPoolSize","10"); //最大连接数10 DataSource dataSource = new HikariDataSource(config); package com.feiyangedu.sample.pop3; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; import javax.sql.DataSource; import java.sql.*; import java.util.ArrayList; import java.util.List; public class JdbcSelect2 { static final String JDBC_URL = "jdbc:mysql://localhost:13306/test0828?useSSL=false&characterEncoding=utf-8&serverTimeZone=UTC"; static final String JDBC_USER = "root"; static final String JDBC_PASSWORD = "123456"; public static void main(String[] args) throws Exception{ DataSource dataSource = createDataSource(); List<Thread> threads = new ArrayList<>(); for(int i=1;i<=4;i++){ final int classId=i; Thread t = new Thread(){ public void run(){ try{ Thread.sleep((long)(Math.random()*1000)); }catch (InterruptedException e){ e.printStackTrace(); } List<Student> list = getStudentsOfClass(dataSource,classId); System.out.println("Students of class: "+classId+";"); for(Student student:list){ System.out.println(student); } } }; threads.add(t); } for(Thread t:threads){ t.start(); } for(Thread t:threads){ t.join(); } } static DataSource createDataSource(){ //创建一个连接池 HikariConfig config = new HikariConfig(); config.setJdbcUrl(JDBC_URL); config.setUsername(JDBC_USER); config.setPassword(JDBC_PASSWORD); config.addDataSourceProperty("connectionTimeout","1000"); //连接超时:1秒 config.addDataSourceProperty("idleTimeout","60000"); //空闲超时:60秒 config.addDataSourceProperty("maximumPoolSize","10"); //最大连接数:10 return new HikariDataSource(config); } static List<Student> getStudentsOfClass(DataSource dataSource,long theclassId){ try(Connection conn = dataSource.getConnection()){ //获取Connection对象 System.err.println("Using connection:"+conn); try(PreparedStatement ps = conn.prepareStatement("select * from students where class_id=?")){ ps.setObject(1,theclassId); try(ResultSet rs = ps.executeQuery()){ List<Student> list = new ArrayList<>(); while (rs.next()){ long id = rs.getLong("id"); long classId = rs.getLong("class_id"); String name = rs.getString("name"); String gender = rs.getString("gender"); Student std = new Student(id,classId,name,gender); list.add(std); } return list; } } }catch (SQLException e){ throw new RuntimeException(e); } } } 2. 总结数据库连接池(javax.sql.DataSource):
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |