DataSource 的理解
2015-12-02 19:44
651 查看
DriverManager 因为不支持数据连接池,所以在应用中一般都使用DataSource.
DataSource 的3种实现:
1.简单的实现,和DriverManager 一样.
2.数据连接池的实现
3.分布式事务的实现,同时也实现数据连接池.
下面是一个例子:
注意:
ConnectionPoolDataSource 不是数据库连接池,而是用于生成连接池连接的,这个连接可以被保存在数据库连接池中.
实现这个接口的类将会被DataSource 实现类来使用,并用于生成数据库连接池.
stackflow 有一个相关的解释
个人理解:
HikariCP 这种第三方连接池库就是javax.sql.DataSource 的实现类.
也可以在独立的java 程序中使用数据连接池(without tomcat):
查看主机上的mysql 连接有5条.
加深理解
javase/tutorial/jdbc
DataSource 的3种实现:
1.简单的实现,和DriverManager 一样.
2.数据连接池的实现
3.分布式事务的实现,同时也实现数据连接池.
1.简单实现
一般来说数据库供应商提供的jdbc driver 会提供javax.sql.DataSource接口的简单实现类.如mysql 的就是com.mysql.jdbc.jdbc2.optional.MysqlDataSource下面是一个例子:
MysqlDataSource ds= new MysqlDataSource();//直接创建DataSource 对象,然后设置属性就可以了. ds.setUser("root"); ds.setPassword(""); ds.setServerName("localhost"); ds.setPort(3306); // ds.setDatabaseName("tyh_rate"); String sql="insert into user(u_name,password,create_time) values(?,?,?)"; try(Connection con=ds.getConnection()){ con.setCatalog("tyh_rate"); PreparedStatement pstmt=con.prepareStatement(sql); pstmt.setString(1, "a"); pstmt.setString(2, "123"); pstmt.setDate(3, Date.valueOf("2015-12-04")); pstmt.executeUpdate(); }
2.使用连接池的 方式.
在mysql 提供的jdbc driver 包下有一个类是:com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource应该是javax.sql.ConnectionPoolDataSource 的实现类.
注意:
ConnectionPoolDataSource 不是数据库连接池,而是用于生成连接池连接的,这个连接可以被保存在数据库连接池中.
实现这个接口的类将会被DataSource 实现类来使用,并用于生成数据库连接池.
stackflow 有一个相关的解释
个人理解:
HikariCP 这种第三方连接池库就是javax.sql.DataSource 的实现类.
也可以在独立的java 程序中使用数据连接池(without tomcat):
HikariConfig config = new HikariConfig(); config.setMaximumPoolSize(5); config.setJdbcUrl("jdbc:mysql://localhost:3306"); config.setUsername("root"); config.setPassword(""); config.addDataSourceProperty("cachePrepStmts", "true"); config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); HikariDataSource ds = new HikariDataSource(config); String sql="insert into user(u_name,password,create_time) value(?,?,?)"; try(Connection con=ds.getConnection()){ con.setCatalog("tyh_rate"); PreparedStatement pstmt=con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); pstmt.setString(1, "a"); pstmt.setString(2, "123"); pstmt.setDate(3, Date.valueOf("2015-12-04")); pstmt.executeUpdate(); } Thread.sleep(10000); //用于暂停jvm,便于查看数据库连接 }
查看主机上的mysql 连接有5条.
sudo netstat -antpul |grep mysql tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4787/mysqld tcp 0 0 127.0.0.1:3306 127.0.0.1:51480 ESTABLISHED 4787/mysqld tcp 0 0 127.0.0.1:3306 127.0.0.1:51477 ESTABLISHED 4787/mysqld tcp 0 0 127.0.0.1:3306 127.0.0.1:51478 ESTABLISHED 4787/mysqld tcp 0 0 127.0.0.1:3306 127.0.0.1:51479 ESTABLISHED 4787/mysqld tcp 0 0 127.0.0.1:3306 127.0.0.1:51481 ESTABLISHED
加深理解
javase/tutorial/jdbc
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复