22【数据库连接池】_22,数据库连接池实现原理

22【数据库连接池】_22*/ public void releaseConnection(Connection conn) { //将连接对象放回到连接池中 pool.addLast(conn); }
Override
public C

*/

公共无效releaseConnection(连接连接){

//将连接对象返回到连接池

pool.addLast(conn);

}

@覆盖

public Connection getConnection(字符串用户名,字符串密码)抛出SQLException {

返回空值。

}

@覆盖

公共T T unwrap(ClassT iface) 抛出SQLException {

返回空值。

}

@覆盖

公共布尔isWrapperFor(Class? iface) 抛出SQLException {

返回假。

}

@覆盖

公共PrintWriter getLogWriter() 抛出SQLException {

返回空值。

}

@覆盖

公共无效setLogWriter(PrintWriter out) 抛出SQLException {

}

@覆盖

公共无效setLoginTimeout(int 秒) 抛出SQLException {

}

@覆盖

公共int getLoginTimeout() 抛出SQLException {

返回0。

}

@覆盖

公共Logger getParentLogger() 抛出SQLFeatureNotSupportedException {

返回空值。

}

}

##### 4)测试类使用数据源类。

1.创建MyDataSource对象

2. 在您的类中进行测试,看看是否可以获得连接对象。

3、先从连接池获取10个输出,然后再获取11个输出,等待2秒,直到出现异常。

4. 如果i==5,释放其中一个对象将产生11个连接对象,其中一个将被重用。

* 代码:

com.dfbz.demo 包;

导入com.dfbz.pool.MyDataSource。

导入java.sql.Connection。

/**

* @作者lscl

*@版本1.0

* @intro:

*/

公共类Demo01_MyDataSource {

公共静态无效主(字符串[] args)抛出异常{

//创建数据源(默认初始化10个连接)

MyDataSource ds=new MyDataSource();

//从数据源获取10个连接对象

for (int i=1; i=10; i++) {

连接conn=ds.getConnection();

System.out.println(\’获取\’第\’+ i + \’连接\’ + conn);

如果(我==5){

//放入连接池中

ds.releaseConnection(conn);

}

}

}

}

### 1.2 Druid 连接池

#### 1.2.1 德鲁伊概述

Druid是阿里巴巴开发的一个用于监控目的的数据库连接池,在功能、性能和可扩展性方面都优于其他数据库连接池。 Druid 已部署在阿里巴巴600 多个应用中,并通过了生产环境大规模部署的严格测试多年。比如一年一度的双十一活动、一年一度的春运火车票抢购潮。

Druid下载地址:https://github.com/alibaba/druid

#### 1.2.2 Druid常用配置参数

| 参数说明|

| — |

| 连接字符串|

| 用户名|

| 密码|

| driverClassName | 驱动程序库`com.mysql.jdbc.Driver` |

| 初始连接数|

| maxActive | 最大连接数

| maxWait | 最大等待时间

#### 1.2.3 DRUID连接池的基本使用

* API介绍

| DruidDataSourceFactory 的方法|

| — |

| public static DataSource createDataSource(Properties property) | 通过properties对象获取数据源对象。

在src目录下新建一个Druid配置文件,命名为druid.properties(文件名不填)。

* 参数:初始连接数5,最大连接池10,最大等待时间2秒

连接字符串

url=jdbc:mysql://localhost:3306/test?useSSL=true

用户名

用户名=root

密码=管理员

driverClassName=com.mysql.jdbc.Driver

#初始连接数

初始大小=5

#最大连接数

最大活跃=10

#最长等待时间

最大等待=2000

*测试代码:

com.dfbz.demo 包;

导入com.alibaba.druid.pool.DruidDataSourceFactory;

导入javax.sql.DataSource;

导入java.io.InputStream。

导入java.sql.Connection。

导入java.util.Properties。

/**

* @作者lscl

*@版本1.0

* @intro:

*/

公共类Demo02_DruidDataSource {

公共静态无效主(字符串[] args)抛出异常{

//创建属性对象

属性属性=new Properties();

//src是classpath所在目录。从类路径加载属性文件并将其转换为字节输入流。

输入流输入

=Demo02\\_DruidDataSource.class.getClassLoader().getResourceAsStream(\’druid.properties\’);

属性.load(in);

//根据加载的配置创建数据源

数据源dataSource=DruidDataSourceFactory.createDataSource(properties);

//获取11个连接对象

for (int i=1; i=11; i++) {

连接连接=dataSource.getConnection();

System.out.println(\’+ i + \’第一个连接对象: \’ + conn);

//释放一个

如果(我==5){

conn.close();

}

}

}

}

*执行效果:

![在此插入图片描述](https://img-blog.csdnimg.cn/7dca6d14ec1b4759852edc36d00ecce4.png#pic_center)

### 1.3 连接池工具类

#### 1.3.1 创建工具类

* 示例代码:

包com.dfbz.utils;

导入com.alibaba.druid.pool.DruidDataSourceFactory;

导入javax.sql.DataSource;

导入java.io.InputStream。

导入java.sql.Connection。

导入java.sql.ResultSet;

导入java.sql.SQLException;

导入java.sql.Statement。

导入java.util.Properties。

/**

* @作者lscl

*@版本1.0

* @intro: 数据源工具类

*/

公共类DataSourceUtils {

私有静态数据源ds;

/\\*\\*

* 在静态代码块中创建数据源对象

*/

静止的{

//创建属性对象

属性信息=new Properties();

尝试(

//获取输入流

InputStream in=DataSourceUtils.class.getClassLoader().getResourceAsStream(\”druid.properties\”) {

//加载到属性对象中

信息.加载(in);

ds=DruidDataSourceFactory.createDataSource(info);

} catch (异常e) {

e.printStackTrace();

}

}

/\\*\\*

* 获取数据源

*/

公共静态数据源getDataSource() {

返回DS。

}

/\\*\\*

* 从连接池中获取连接对象

*/

公共静态连接getConnection() {

尝试{

返回ds.getConnection()。

} catch(SQLException e) {

e.printStackTrace();

抛出一个新的RuntimeException(e)。

}

}

/\\*\\*

* 释放资源

*/

公共静态无效关闭(连接conn,语句stmt,结果集rs){

//关闭结果集

if (rs!=null) {

尝试{

rs.close();

} catch(SQLException e) {

e.printStackTrace();

}

}

//关闭语句对象

if (stmt!=null) {

尝试{

stmt.close();

} catch(SQLException e) {

e.printStackTrace();

}

}

//关闭连接对象

if (conn!=null) {

尝试{

conn.close();

} catch(SQLException e) {

e.printStackTrace();

}

}

}

/\\*\\*

* 关闭连接

*/

公共静态无效关闭(连接conn,语句stmt){

关闭(conn,stmt,空);

}

}

#### 1.3.2 使用数据源工具类

*1)SQL语句:

如果t\\_user 存在,则删除该表。

创建表t\\_user (

id int(11) NOT NULL AUTO_INCRMENT,

用户名varchar(255) 字符集utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

密码varchar(255) 字符集utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

出生日期NULL 默认NULL,

地址varchar(255) 字符集utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

使用BTREE 的主键(id)

) 引擎=InnoDB 自动增量=6 字符集=utf8 COLLATE=utf8_general_ci ROW_FORMAT=动态;

t_用户记录

INSERT INTO t\\_user VALUES (1, ‘root’, ‘admin’, ‘1998-10-10’, ‘江西景德镇’);

INSERT INTO t\\_user VALUES (2, \’admin\’, \’123\’, \’1997-08-21\’, \’福建福州\’);

INSERT INTO t\\_user VALUES (3, \’张三\’, \’admin\’, \’2022-06-03\’, \’江西赣州\’);

* 示例代码:

com.dfbz.demo 包;

导入com.dfbz.utils.DataSourceUtils。

导入java.sql.Connection。

导入java.sql.PreparedStatement;

导入java.sql.ResultSet;

导入java.util.Date。

/**

* @作者lscl

*@版本1.0

* @intro:

*/

公共类Demo03_DataSourceUtils {

公共静态无效主(字符串[] args)抛出异常{

//获取连接对象

连接连接=DataSourceUtils.getConnection();

//获取预编译语句对象

ReadyStatement ps=conn.prepareStatement(\’select \\* from t\\_user;\’);

//获取结果集

结果集rs=ps.executeQuery();

//封装数据

while (rs.next()) {

int id=rs.getInt(\’id\’);

字符串名称=rs.getString(\’用户名\’);

字符串性别=rs.getString(\’密码\’);

日期生日=rs.getDate(\’生日\’);

字符串地址=rs.getString(\’地址\’);

System.out.println(\’id:\’ + id);

System.out.println(\’name:\’ + 名称);

System.out.println(\’性别:\’ + 性别);

System.out.println(\’birthday:\’ + 生日);

System.out.println(\’地址:\’ + 地址);

System.out.println(\’—————-\’);

}

如何自学黑客网络安全

黑客零基础入门学习路线规划

初级黑客

1.网络安全理论知识(2天)

了解行业背景和前景,决定发展方向。

学习有关网络安全的法律法规。

网络安全运营理念。

介绍等保、等保法规、流程、规范。 (很重要)

2.渗透测试基础知识(1周)

渗透测试程序、分类和标准

信息收集技术:主动/被动信息收集、Nmap工具、Google Hacking

漏洞扫描、漏洞利用、原理、使用、工具(MSF)、IDS绕过、防病毒侦察

主机攻防训练:MS17-010、MS08-067、MS10-046、MS12-20等。

3.操作系统基础知识(1周)

Windows系统常用功能及命令

Kali Linux系统常用功能及命令

操作系统安全(系统入侵调查/系统加固基础设施)

4.计算机网络基础(1周)

计算机网络基础、协议、体系结构

网络通信原理、OSI模型、数据传输流程

常用协议分析(HTTP、TCP/IP、ARP等)

网络攻击技术和网络安全防御技术

Web漏洞原理及防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5.数据库基础操作(2天)

数据库基础

SQL语言基础

加强数据库安全

6. 网络渗透(1周)

HTML、CSS 和JavaScript 简介

OWASP前10名

Web漏洞扫描工具

Web入侵工具:Nmap、BurpSuite、SQLMap、其他(Chopper、Miss Scan等)

恭喜。学会了这些,基本上就可以找到渗透测试、Web渗透、安全服务、安全分析等与网络安全相关的工作了。学好标准保护模块,您也可以找到下一份工作。标准保护工程师。薪资范围6,000-15,000

到现在已经过去一个月左右了。你已经成为一个“脚本小子”了。想要进一步探索吗?

如果你想参与网络安全黑客,作者为你准备了一份:282G,全网最全的网络安全资料包。评论区留言即可获取。

7. 脚本编程(初级/中级/高级)

在网络安全领域。编程能力是“脚本小子”与真正黑客之间的关键区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用的工具不能满足实际需求时,往往需要扩展现有工具或者可能需要创建工具或自动化脚本来满足要求。需要特定的编程技能。在分秒必争的CTF比赛中,需要具备一定的编程能力,才能有效地利用自制的脚本工具来实现各种目标。

如果您是从头开始,我们建议您选择一种脚本语言:Python/PHP/Go/Java 并学习对常用库进行编程。 Wamp 和XAMPP 是PHP 环境的推荐选择。IDE强烈推荐Sublime。 · 学习Python编程,学习内容包括:语法、正则、文件、网络、多线程等常用库。推荐:010至30000。不要阅读所有内容。创建漏洞利用并创建一个简单的网络爬虫。 · PHP 基础知识学习语法,创建简单的博客系统,并学习PHP 或Python 框架(可选)。 Bootstrap 或CSS 布局。

8.超级黑客

这部分内容对于没有基础知识的同学来说还是比较遥远的,所以我们就不细说了,附上学习路线。

网络安全工程师企业级学习路线

如果图片太大且被平台压缩导致看不清,请在评论区点赞留言。我一定会回复

视频支持材料国内外网络安全书籍和文档工具

当然,除了支持视频之外,我们还整理了各种文档、书籍、资源工具,并进行了分类。

有些视频教程是我购买的,其他平台上没有。

以上#22【数据库连接池】_22的相关内容来源网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92029.html

(0)
CSDN的头像CSDN
上一篇 2024年6月24日
下一篇 2024年6月24日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注