技术标签: 数据库连接池 jdbc JAVA后端笔记 数据库 后端 [方立勋30天掌握JavaWeb学习]
缺点:用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出、拓机。
使用连接池:
编写连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:
Connection getConnection()
Connection getConnection(String username, String password)
实现DataSource接口,并实现连接池功能的步骤:
一般有三种方式:
1. 写一个connection子类,覆盖close方法,增强close方法
2. 用包装设计模式
3. 用动态代理
使用动态代理技术构建连接池中的connection
proxyConn = (Connection) Proxy.newProxyInstance(this.getClass()
.getClassLoader(), conn.getClass().getInterfaces(),
new InvocationHandler() {
//此处为内部类,当close方法被调用时将conn还回池中,其它方法直接执行
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
if (method.getName().equals("close")) {
pool.addLast(conn);
return null;
}
return method.invoke(conn, args);
}
});
使用DBCP示例代码:
static{
InputStream in = JdbcUtil.class.getClassLoader().
getResourceAsStream("dbcpconfig.properties");
Properties prop = new Properties();
prop.load(in);
BasicDataSourceFactory factory = new BasicDataSourceFactory();
dataSource = factory.createDataSource(prop);
}
查看Tomcat文档,示例代码:
<Context>
<Resource name="jdbc/datasource" auth="Container"
type="javax.sql.DataSource" username="root" password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/jdbc"
maxActive="8" maxIdle="4"/>
</Context>
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
dataSource = (DataSource)envCtx.lookup("jdbc/datasource");
特别提醒:此种配置下,驱动jar文件需放置在tomcat的lib下
文章目录前言IDEA搭建SpringBoot新建项目配置及启动配置启动简单功能的实现页面输出文本或返回JSON跳转模板(templates文件夹下的HTML)实现JPA增删查改数据库表创建实体类Dao查询接口控制器方法HTML模板页面效果展示坑和知识点前言此文章讲解使用IDEA搭建SpringBoot项目,并实现简单的增删查改功能,在搭建过程中遇到了很多坑。SpringBoot真的是非常的简...
[pwn]堆:堆风水与堆排布-babyfengshui所谓堆风水也叫作堆排布,其实说严格了并不是一种漏洞的利用方法,而是一种灵活布置堆块来控制堆布局的方法,在一些一些其他漏洞的利用中起到效果。通过一道经典的题目,由清华蓝莲花战队出的babyfengshui来看一下:babyfengshui查看安全策略没开PIE,但值得一提的是这是一个32位的程序,32位的堆是4字节对齐的。查看程序逻辑...
[email protected]:~# apt-get install samba正在读取软件包列表… 完成正在分析软件包的依赖关系树 正在读取状态信息… 完成 有一些软件包无法被安装。如果您用的是不稳定(unstable)发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们还在新到(incoming)目录中
珍藏版(1)——Mybatis入门1.什么是MyBatis2.为什么我们要用Mybatis?3.Mybatis快速入门3.1 导入开发包3.2准备测试工作3.3 创建mybatis配置文件3.4 编写工具类测试是否获取到连接3.5 创建实体与映射关系文件3.6 编写DAO4.Mybatis工作流程5.完成CRUD操作5.1 增加学生5.2 根据ID查询数据5.3 查询所有数据5.4 根据id删除5.5 修改5.6 小细节
这是算法与数据结构番外系列的第一篇,这个系列未来的主要内容是补充一些与算法与数据结构相关的知识,这些知识比较零碎,同时也与正传关系密切,往往需要阅读了正传的相关内容以后,才能较好的理解这部分内容。如果对番外系列不感兴趣的话,是可以跳过此系列内容的,不会影响理解其他文章的内容。阅读本文前,需要首先了解队列和堆的相关知识。此文优先队列的代码可以在我的 github 上查看。优先队列优先队列是一种特殊的...
这篇文章主要介绍了关于python 把文件中的每一行以数组的元素放入数组中的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下有时候需要把文件中的数据放入到数组中,这里提供了一种方法,可以根据文件结尾的标记进行数据拆分,然后再把拆分的文件放入数组中# -*-coding: utf-8 -*-f = open("username.txt","w")f.write("Lycoridia...
引言iTOP6818是8核嵌入式开发平台,在ubuntu系统下可以设置触摸屏显示或HDMI显示,但官方并没有做对应的双屏异显,即触摸屏和HDMI显示不同的画面。基于个人需求,本人完成了该功能配置,现将配置方法说明如下。资料下载配置思路在内核中重新创建一个fb节点来挂载HDMI设备,主设备触摸屏为fb0,次设备HDMI为fb1,通过修改内核驱动代码可以实现双屏异显。配置方法...
Linux下查看软、硬raid信息的方法软件raid:只能通过Linux系统本身来查看cat /proc/mdstat可以看到raid级别,状态等信息。硬件raid: 最佳的办法是通过已安装的raid厂商的管理工具来查看,有cmdline,也有图形界面。如Adaptec公司的硬件卡就可以通过下面的命令进行查看:# /usr/dpt/raidutil -L a
MDict 将字典定义(关键字,解释)放在 MDX 文件中,字典相关的其他资源样式文件,比如图片,发音,样式放在 MDD 文件中,虽然存放的内容是不一样的,但是两种文件的结构是一致的。源文件格式MDict 的 html 格式每个项目两行第一行是关键字第二行开始是正文,这里的正文应该包括关键字。可以使用 html 的标记(不要包含) , 这个程序会自动加上,另注意在转换时要指明源数据为 html)....
本次用到的环境:kali(2016.2)32位系统.ip地址:192.168.1.104目标靶机为:win7sp1x64系统(关闭防火墙),ip地址:192.168.1.105=================================若kali为64位windows为32需要安装wine32 ,但64位的kali下无法apt-get install wine32在执行exploit时会出现...
最长公共子串 (The Longest Common Substring)参考自:https://blog.csdn.net/wateryouyo/article/details/50917812LCS问题就是求两个字符串最长公共子串的问题。解法就是用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹配情况,若是匹配则为1,否则为0。然后求出对角线最长的1的序列,其对应的位置就是最长匹配...
数月前对某一程序分析,拿到程序应PEid扫描了一下,发现是asp 的壳,之前脱过此类壳感觉难度不大,此程序在OEP调用了GetStartupInfo,找到OEP并不困难,结合堆栈基本就可以确定OEP。然后开始用ollydump dump程序,importrec修复,一切顺利。 好了,开始运行脱壳后的程序,程序开始处理,显示进度条。在这时本人喜悦不胜言表,就等着开始自己的探索之旅,突然我w