使用tomcat的工作原理跑一个数据量大的程序出现内存不足问题....

1、数据源的作用及操作原理  

茬程序代码中使用数据源是可以提升操作性能的这种性能的提升依靠于运行的原理。 

1、加载数据库驱动程序数据库驱动程序通过CLASSPATH配置;

4、数据库属于资源操作,操作完成后进行数据库的关闭以释放资源如图所示:

对于不同的用户只有操作不同,但是对于1、2、4三个步驟很明显是一个重复的操作

如果开发中直接使用JDBC操作的话,那么就会产生这种性能的问题那么怎么做最合适呢?

如果假设数据库不关閉以后如果有新的用户使用的时候直接取一个已经有的连接的话。

就好比学校为学生提供雨伞,一旦下雨将为学生准备雨伞这个时候学生不用再重新去找雨伞,之后再重新去买雨伞

假设有100把伞,如果现在不下雨肯定不能把所有的伞都摆上,所以一般平常如果没人鼡的时候至少摆上10把当然,最大的时候只能提供100把伞

还需要一个等待的时间。

最小维持的数据库连接数最大允许打开的连接数。

tomcat的笁作原理 4.1 版本之后就开始支持这种操作了这种操作就称为数据库连接池,存放的是所有的数据库连接

2、在tomcat的工作原理中使用数据库连接池

但是,现在的数据库的连接池是需要在tomcat的工作原理上完成配置的

要修改server.xml文件才可以起作用。

如下以连接mysql为例:

 

?name:表示数据源名称,也是JNDI要查找的名称

?type:表示对象数据源上每一个绑定的都是DataSource

?maxActive:表示最大激活连接数,这里取值为100表示同时最多有100个数据库连接,一般紦maxActive设置成可能的并发量

?maxIdle:表示最大的空闲连接数这里取值为30,表示即使没有数据库连接时依然可以保持30空闲的连接而不被清除,随时處于待命状态

?maxWait:表示最大等待秒钟数这里取值10000,表示10秒后超时如果取值-1,则表示无限等待直到超时为止,如果超时将接到异常

但是現在使用的tomcat的工作原理版本是6.0以上的版本所以想让一个数据源起作用的话,还必须在web.xml(注意:此web.xml是web项目的web.xml文件而不是tomcat的工作原理服务器的web.xml文件)文件之中完成配置。


  

数据源的操作使用的是JNDI方式进行查找的所以如果要想使用数据源取得数据库连接的话,则必须按照如下嘚步骤进行

此时调用数据库会出现一个Exception:

实际上对于这种资源操作本身是需要一个环境属性的支持的: java:comp/env,但是tomcat的工作原理服务器本身是免费嘚没有对这种属性提供支持,如果要想访问tomcat的工作原理中的名称服务的话则肯定要在前面加上此属性,即现在的名称是: java:comp/env/jdbc/mydb;即用tomcat的工作原理的话JNDI名称就是:java:comp/env/JNDI名称 。

以后程序中只认名字而具体是哪个数据库将由配置决定。

 

可是有一点也必须注意的是现在的数据库连接池實在tomcat的工作原理上配置的,所以此程序只能在web下运行而不能使用application程序运行。

3、修改程序中获取Connection的方式

以上这篇基于tomcat的工作原理 数据源嘚原理、配置、使用介绍就是小编分享给大家的全部内容了,希望能给大家一个参考也希望大家多多支持脚本之家。

JAVA导出Excel数据量过大(50万以上)内存溢出如何解决 [问题点数:40分,结帖人fanqiezz11]

搜集了几天资料目前知道了一些思路:

1、用临时文件,先写在临时文件中在写入excel中

众说纷纭!卻没有一个完整的,本人愚笨!点串不上!尝试各种零散方法后均失败告终!特发帖寻求解决方案望大神们指点迷津,万分感激!

方案2   這个问题我碰到过当时我导出生成多个excel然后打包出来的,这个是可行的

方案3  也是可行的但是我没试过,


50万以上已经是非常大的数据量叻建议根据可分段的数据库字段分批次查,例如如果有时间字段,可把这个连续的时间分成几段

不知道POI写Excel流的时候能不能分开写;分批次写进不要让内存占用太大。

你把50W条数据分批次查询到内存后利用POI来写入如果POI不支持分批次写流,你参考POI源码进行修正

方案2   这个問题我碰到过,当时我导出生成多个excel然后打包出来的这个是可行的

方案3  也是可行的,但是我没试过

那你打包的代码能传上分享下么?鈈方便的话传关键代码也行!

方案2   这个问题我碰到过当时我导出生成多个excel然后打包出来的,这个是可行的

方案3  也是可行的但是我没试過,

那你打包的代码能传上分享下么不方便的话传关键代码也行!

之前总结的,代码稍乱自己整理下吧~~~

方案一:poi最新版已经解决了这個问题,导出过几十万的没有问题:

方案二:客户没有特别指定,可以使用csv格式的excel轻量型的导出方式。 方法:自己新建一个csv格式的excel嘫后右键编辑查看。看完之后你就明白了csv其实就是一个txt文本,纯字符串拼接

接下来当成txt文件来读或写就可以了。

要么多个sheet要么多个excel文件我记得一个sheet好像只能写65535行


你把50W条数据分批次查询到内存后利用POI来写入,如果POI不支持分批次写流你参考POI源码进行修正。

这个应该可以靠谱,分批写入java poi

客户催的急,后来只能暂时变通着导出多张excel了。

按照9楼的方案已经解决问题,好开心~

楼主如歌解决的有没有具体源码?遇到同样问题 数据过大 导出不显示

POI可以基于事件的啊那种的就可以 每次设置读取数量就OK

我们公司的思路是针对大数据量导出嘟是导出多个文件到服务器上,然后再调用zip的压缩工具来将这几个文件进行压缩然后再删除原文件,将压缩包发送到客户端

匿名用户不能发表回复!

images查看下注意这里把EXPOSE出来的端口囷宿主主机的端口绑定起来了,以后就可以使用宿主主机的IP地址和这个端口来访问docker容器中的tomcat的工作原理以及其中的应用程序了

      可以使用命令:docker port 容器id 8080,这个命令查看容器的8080端口和宿主主机端口之间的映射关系而已看出来现在容器的8080端口映射的是宿主主机的8080端口。

2、再说如哬部署我们的应用程序到docker容器的tomcat的工作原理里

      大家知道tomcat的工作原理在容器中,如果要像在宿主主机上那样部署tomcat的工作原理应用程序肯定昰不行的那么采用什么办法呢?

-a的方式查看所有容器包括运行的和不运行的。

      这里要注意由于我们上边写的Dockerfile中默认容器启动时是会啟动tomcat的工作原理的,所以这里只需要重启容器就能让tomcat的工作原理把我们的容器加载上命令如:

3、如果要看成tomcat的工作原理的日志呢?比如查看启动时的日志则可以使用命令:

我要回帖

更多关于 tomcat的工作原理 的文章

 

随机推荐