问题描述
我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?
解决方案
解决方案二:
tomcat关闭的时候session才关闭,这样会出问题吗?这样会使系统不安全.而且效率非常的低.如果你闲麻烦就用spring的事务管理.几行配置就搞定..
解决方案三:
引用1楼wxwlion0425的回复:
tomcat关闭的时候session才关闭,这样会出问题吗?这样会使系统不安全.而且效率非常的低.如果你闲麻烦就用spring的事务管理.几行配置就搞定..
现在的问题是,由于整个项目都是在同一个session中运行,怎么才可以让项目在tomcat关闭之前把session关闭。
解决方案四:
up
解决方案五:
应该可以,接分
解决方案六:
不可以简单的说,web程序是运行在一个多线程环境中,session是线程安全的,session不应跨线程访问。至于说tomcat关闭的事后做些什么是没问题的,javax.servlet.ServletContextListener就可以干
解决方案七:
帮你顶一下。
解决方案八:
顶五楼的
解决方案九:
web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在biz层。容器会帮助你保证session的范围。楼主你现在是在异想天开,你还不知道正常的应用是什么样子。再多看看书吧。
解决方案十:
在项目中只用一个session是不可取的。Hibernate作为一个轻量级框架,创建和关闭一个session是不会影响系统性能的。而且对每一个业务(用户的一次操作)创建一个session也方便事务的管理。对于缓存问题,SessionFactory,也就是Hibernate的第一级缓存,它的创建是一个很耗时的过程,在系统启动或第一次访问时创建,具体的创建过程我们不用关心,对于Session,Hibernate的第二级缓存,当提交事务时会自动清理缓存,或手动clear。
解决方案十一:
顶下9楼的
解决方案十二:
session是多线程可以创建多个实例,理论上session是现成安全的,一个线程只用一个实例,就是要避免多个线程共享一个session;如果用一个线程共享数据的时候.用session.flush(强制缓存与数据库同步更新时候会出现混乱的,容易出错;可以把想共享的数据放在二级缓存中,能够一次运行的就用session处理;优化还可以设置清理缓存的级别:session.setFlushMode(FlushMode.COMMIT):FlushMode.COMMIT只在递交的时候,清理缓存,在只是查询无修改的状况下用此模式,会节省资源;FlushMode.AUTO,默认,保持数据的顺序;
解决方案十三:
引用8楼gordonkkk的回复:
web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在biz…
我说的嘛,看了上面的回答说session是线程安全的,我还在怀疑呢。。。。。session不是线程安全的,而且是轻量级的对象,放心的new吧。
解决方案十四:
引用8楼gordonkkk的回复:
web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在b…
现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
解决方案十五:
引用8楼gordonkkk的回复:
web应用程序一定是多线程的。而session不是线程安全的。如果所有的请求在访问数据库时,都用一个session,会产生非常严重的资源争用问题。sessionFactory是线程安全的,相应的它的成本也比较高,在每一个线程中,从线程安全的sessionFactory得到session,才是正确的做法。session作为jdbcConnection的一个高级封装,应该在事务边界范围外,尽晚得到尽早释放。一般的项目,如果用支持声明式事务的javaEE容器,事务边界都在b…
现在我就是不知道在多线程的环境下会不会出问题,但是,共用一个session也是有好处的啊,例如,我们就没有脱管对象了,这样,我们的每次对对象的操作就可以直接从session缓存里面拿,而且拿到的对象都是持久化的,而每次修改都会直接存入数据库,我们只需要控制session.flush()跟事务就可以很好地实现数据的存储。我知道session是一个轻量级的资源,但是是不是线程安全的我就不知道了。不知道我这么想对不对?
解决方案:
顶
解决方案:
sessionFactory本身是个session池,可以说在里面拿个session不会有太大影响,而且也容易管理
解决方案:
session的创建还是比较消耗资源的,其实一开始lz的想法是可以采用的,就是建立session管理器,或者session池。这样的功能一般的应用服务器都会有实现,所以lz不需要自己动手实现,可以考虑使用应用服务器的数据源方式连接数据库。把管理session的功能交给服务器这样比较好。
解决方案:
引用9楼zhangzhenting的回复:
在项目中只用一个session是不可取的。Hibernate作为一个轻量级框架,创建和关闭一个session是不会影响系统性能的。而且对每一个业务(用户的一次操作)创建一个session也方便事务的管理。对于缓存问题,SessionFactory,也就是Hibernate的第一级缓存,它的创建是一个很耗时的过程,在系统启动或第一次访问时创建,具体的创建过程我们不用关心,对于Session,Hibernate的第二级缓存,当提交事务时会自动清理缓存,或手动clear。
Session级缓存是内部缓存,也就是一级缓存SessionFactory级的缓存才是二级缓存!!!
解决方案:
不是很明白。
解决方案:
学习帮顶
解决方案:
顶18楼
解决方案:
引用楼主ben0759的帖子:
我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?
session不关闭是个非常不好的事情,要是业务请求不多倒是不会出现什么问题你要是做的系统稍微大一些,请求多而复杂你到运行测试时就会出现意想不到的错误所以建议你对session进行控制和管理我的习惯是在业务层专门建立一个session的管理类,里面负责对session进行管理其他的业务请求处理类直接调用就可以了
解决方案:
session是一级缓存,不应该让session共享.可以用ThreadLocal类为每一个线程配一个session.
解决方案:
Sessionsession=HibernateUtil.getSessionFactory().getCurrentSession();这种用法呢?
解决方案:
引用22楼yinyuan1987的回复:
引用楼主ben0759的帖子:我们在做项目的时候,总是会考虑对每一个操作打开一个新的session,然后对session进行单独的操作,然后关闭session。如果,我在整个项目运行的时候,都是通过一个session来进行,也就是说,所有的操作都是在一个session中进行,而这个session是不关闭的,只有等到tomcat关闭的时候session才关闭,这样会出问题吗?用一个session来管理缓存,这样效率高吗?session不关闭是个非常不好的…
具体怎么样?
解决方案:
up
解决方案:
up
解决方案:
顶
解决方案:
顶
解决方案:
不知道会不会造成内存溢出问题。。
解决方案:
引用32楼cxalxpks的回复:
不知道会不会造成内存溢出问题。。
也是,不知道并发好不好。
解决方案:
spring有非常完善的hibernate管理机制用springhibernate模板来管理你不用考虑这些问题事物问题也非常好解决,只需要配置
解决方案:
本人一直都是把session交给spring来管理
解决方案:
支持用spring。。。
解决方案:
不可以,也没必要那样用