applicationContext.xml 配置说明_hjwang1的博客-程序员秘密

技术标签: dao  WebServer  mysql  hibernate  数据库  class  bean  

转自:http://wangqiaowqo.iteye.com/blog/186993

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 

<beans> 
<!-- 配置数据源,使用DBCP数据源 --> 
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
<!-- MySQL数据库的驱动 --> 
<property name="driveClassName" value="com.mysql.jdbc.Driver" /> 
<!-- 数据库的URL --> 
<property name="url" value="jdbc:mysql:///newsboard" /> 
<!-- 指定数据库的用户名 --> 
<property name="username" value="root" /> 
<!-- 指定数据库的密码 --> 
<property name="password" value="123"/> 
<!-- 指定数据库的最大连接数 --> 
<property name="maxActive" value="100"/> 
<!-- 指定数据库的最大空闲连接数 --> 
<property name="maxIdle" value="30"/> 
<!-- 指定数据库的最大等待数 --> 
<property name="maxWait" value="1000"/> 
<!-- 指定数据库的默认自动提交 --> 
<property name="defaultAutoCommit" value="true"/> 
<!-- 指定数据库的连接超时时是否启动删除 --> 
<property name="removeAbandoned" value="true"/> 
<!-- 指定数据库的删除数据库连接的超时时长 --> 
<property name="removeAbandonedTimeout" value="60"/> 
<property name="logAbandoned" value="true"/> 
</bean> 
<!-- 配置Hibernate的SessionFactory --> 
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
<!-- 依赖注入SessionFactory所需的DataSource --> 
<property name="dataSource" ref="dataSource"/> 
<!-- 加载所有的映射文件 --> 
<property name="mappingResource"> 
<!-- 下面列出所有的持久化映射文件 --> 
<list> 
<value>org/yeeku/model/User.hbm.xml</value> 
<value>org/yeeku/model/News.hbm.xml</value> 
<value>org/yeeku/model/NewsReview.hbm.xml</value> 
<value>org/yeeku/model/Category.hbm.xml</value> 
</list> 
</property> 
<!-- 下面指定Hibernate的属性 --> 
        <property name="hibernateProperties"> 
        <props> 
        <!-- 下面指定Hibernate使用的数据库方言 --> 
        <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDBDialect</prop> 
        </props> 
        </property>
</bean> 

<!-- 配置DAO组件,必须提供DAO的实现类 --> 
<bean id="dao" class="org.yeeku.dao.hibernate.BaseDAOHibernate"> 
<property name="sessionFactory" ref="sessionFactory" /> 
</bean> 
<!-- 配置DAO组件,必须提供DAO的实现类 --> 
<bean id="newsDAO" class="org.yeeku.dao.hibernate.NewsDAOHibernate"> 
<property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<!-- 定义事务模板类,模板类增加abstract="true"属性 --> 
<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
<property name="transactionManager" ref="transactionManager"> 
<props> 
<!-- 所以save开始的方法的事务属性 --> 
<prop key="save*">PROPAGATION_REQUIRED</prop> 
<!-- 所有以remove开始的方法的事务属性 --> 
<prop key="remove">PROPAGATION_REQUIRED</prop> 
<!-- 其他方法的事务属性 --> 
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop> 
</props> 
</property> 
</bean> 
<!-- 配置具体的业务逻辑层组件的事务代理 --> 
<bean id="manager" parent="txProxyTemplate"> 
<!-- 生成业务代理之前,必须使用target制定需要生成代理的目标bean, 
目标bean采用嵌套bean的方式定义 --> 
<property name="target"> 
<bean class="org.yeeku.service.impl.BaseManager"> 
<!-- 定义嵌套bean所使用的DAO组件 --> 
<property name="dao" ref="dao"/> 
</bean> 
</property> 
</bean> 

<!-- 配置目标bean代理对象 --> 
<bean id="facade" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> 
<!-- 为代理工厂bean注入事务管理器 --> 
<property name="transactionManager" ref="transactionManager"/> 
<!-- 定义代理的目标bean 此处的目标bean,必须是容器中真实存在的bean实例 --> 
<property name="target" ref="facadeManager"/> 
<!-- 确定生成事务代理的事务属性 --> 
<property name="transactionAttributes"> 
<props> 
<prop key="save*">PROPAGATION_REQUIRED</prop> 
<prop key="remove*">PROPAGATION_REQUIRED</prop> 
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop> 
</props> 
</property> 
</bean> 
</beans>


Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。connections如果空闲超过8小时,Mysql将其断开,而DBCP并不知道该connection已经失效,如果这时有 Client请求connection,DBCP将该失效的Connection提供给Client,将会造成上面的异常。
        mysql配置中my.cnf 的wait_timeout值一定要大于等于连接池种的idle_timeout 值。否则mysql会在wait_timeout的时间后关闭连接,然而连接池还认为该连接可用,这样就会产生异常。

System Runtime Error:

Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed:

javax.servlet.ServletException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionException: JDBC begin failed: at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:515) at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at com.buptnu.usermanage.filter.LoginFilter.doFilterInternal(LoginFilter.java:58) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199) at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282) at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:767) at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Thread.java:595)

DBCP连接池说明:
driverClassName 
url 
username 
password 
上面四个分别是驱动,连接字符串,用户名和密码

maxActive 连接池支持的最大连接数 
maxIdle 连接池中最多可空闲maxIdle个连接 
minIdle 连接池中最少空闲maxIdle个连接 
initialSize 初始化连接数目 
maxWait 连接池中连接用完时,新的请求等待时间,毫秒 
timeBetweenEvictionRunsMillis和minEvictableIdleTimeMillis一起使用,每

timeBetweenEvictionRunsMillis毫秒秒检查一次连接池中空闲的连接,把空闲时间超过minEvictableIdleTimeMillis毫秒的连接断开,直到连接池中的连接数到minIdle为止

主要把这两个参数加上就好。

minEvictableIdleTimeMillis 连接池中连接可空闲的时间,毫秒

removeAbandoned true,false,是否清理removeAbandonedTimeout秒没有使用的活动连接,清理后并没有放回连接池 
removeAbandonedTimeout 活动连接的最大空闲时间 
logAbandoned true,false,连接池收回空闲的活动连接时是否打印消息 
minEvictableIdleTimeMillis, removeAbandonedTimeout这两个参数针对的连接对象不样,minEvictableIdleTimeMillis针对连接池中的连接 对象,removeAbandonedTimeout针对未被close的活动连接


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hjwang1/article/details/7473250

智能推荐

Socket使用UDP实现客户端发信息,服务端接收_socket udp接收服务端消息_顶尖出色程序员的博客-程序员秘密

//客户端package test;import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;import java.net.UnknownH...

AJAX-前后端开发的纽带_万少博的博客-程序员秘密

最近更新时间:2017年7月6日15:30:40《我的博客地图》    Ajax,Asyncchronous JavaScropt and Xml,异步js和xml,是一种异步请求的技术,这项技术能够向服务器请求额外数据,而无需卸载页面。    Ajax技术的核心是XMLHttpRequest对象(简称XHR)。1、原生js封装XHR对象function createXHR()...

mysql 汉明距离检索_汉明距离海量数据算法_真好玩主人的博客-程序员秘密

通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析。分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法对于待比较的文本数据不多时还比较好用,如果我们的爬虫每天采集的数据以千万计算,我们如何对于这些海量千万级的数据进行高效的合并去重。最简单的做法是拿着待比较的文本...

嵌入式Linux | AP3216三合一整合型光感测器实验分享_嵌入式大杂烩的博客-程序员秘密

点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看嵌入式笔记!1、前言 开发板上有AP3216三合一整合型光感测器,看了看出厂SDK包中并未添加相关驱动。本次我们就一起来学习一下。2...

Eplan:谈谈电气图纸设计结构1一基本知识_eplan 分层 构造_sdzyg2000的博客-程序员秘密

谈谈电气图纸设计结构1一基本知识在自控领域,经历了若干年的思考和实践后,总想把自己的一些想法总结出来,也算是人到了一定年龄,希望自己领悟到的一些东西不要被埋没的意思吧。逛了很多论坛,最后发现还是在博客里面写文章,能对文章有比较系统性的管理,初略规划了一下,想从自动化电气设计/PLC编程/OPC编程/计算机编程等几个方面谈谈自己的思考。首先从网上找到了我在2008年在亿万论坛上发的帖子(事实上找的是曹大平收集和整理的部分,非常感谢这位有心人),作为博客中电气设计部分内容的引子,以下内容是2008年发表

vim编辑命令[email protected]夜魅的博客-程序员秘密

一、启动vim: 在命令行窗口中输入以下命令即可: 1.Vim 直接启动vim 2.Vim filename 打开vim并创建名为filename的文件二、文件命令 1.打开单个文件 vim file 2.同时打开多个文件 vime file1 file2 file3 3.在vim窗口中打开一个新文件 :open file 4.在新窗口中打开文件 ...

随便推点

21.重学webpack——三种webpack调试模式_俞华的博客-程序员秘密

【重学webpack系列——webpack5.0】1-15节主要讲webpack的使用,当然,建议结合《webpack学完这些就够了》一起学习。从本节开始,专攻webpack原理,只有深入原理,才能学到webpack设计的精髓,从而将技术点运用到实际项目中。可以点击上方专栏订阅哦。以下是本节正文:1.浏览器调试在node环境执行以下命令,会生成一个服务地址node --inspect-brk ./node_modules/webpack-cli/bin/cli.js浏览器打

poj1177--Picture--扫描线_picture 扫描线_CS_ChenLI的博客-程序员秘密

思想和前段时间的1151差不多,都是通过扫描线的移动来计算周长,不同的是要通过对与x轴平行的扫描线扫一次,与y轴平行的扫描线扫一次,扫描两次得到周长。变量last为记录上一次扫描得到的长度,sum为记录这一次总共扫描得到的长度。abs(sum-last)即为所扫描到的一次长度,非常耐人寻味的是,我询问学长为什么可以这样做的时候,学长提到了

win11使用excel卡顿怎么办 Windows11使用excel卡死的解决方法_win11excel经常卡死_小白一键重装系统的博客-程序员秘密

最近许多用户都升级了Windows11系统,而Windows11最大的特点就是比Win10流畅。但是不少用户在使用Excel的时候发现自己的电脑变得非常的卡,没办法正常使用,这要怎么解决呢?下面小编就带着大家一起看看吧!更多Windows11系统教程可以参考小白装机网。操作方法:1、点击“文件”-“选项”2、点击“常规”选项卡,取消勾选显示开始屏幕3、选择“加载项”-“管理(Excel加载)”-“转到”4、取消所有宏5、选择“加载项”-“管理(Com加载)”-“转

VTK在MFC中实现的小实例_mfc 使用vtk实例_上官焱阳的博客-程序员秘密

void CVTKMFCDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码CRect rect;   m_dixing.GetClientRect(&rect); //显示在MFC上的静态文本框中 // create sphere geometry   vtkSphereSource *sphere = vtkSphereS

在CorelDRAW中如何完成属性的复制_coreldraw复制属性快捷键_moroing的博客-程序员秘密

复制功能在任何一个编辑软件中都是必不可少、使用率很高的一个功能,在矢量图形设计软件CorelDRAW 中也不例外。关于对象的复制这里就不过多示意了,主要为大家示范一下如何在设计中复制对象的一些属性。一、复制属性按钮在CorelDRAW的编辑菜单下,有一个叫做“复制属性自…”的按钮,这个功能键可以实现对对象的几个属性(轮廓笔、轮廓色、填充和文本)的复制。这里做一个简单的案例示范:将一个圆形的轮廓线和填充复制到另一个椭圆上。1、绘制一个圆形并为其添加填充颜色和轮廓线。要注意这里的颜色的填充不要使

SPOJ NSUBSTR (后缀自动机)_aekijekzn484879763的博客-程序员秘密

SPOJ NSUBSTRProblem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数。Solution :首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对于n个后缀对应的节点打上标记,则每个结点对应的一些子串所出现的次数即为其子树内标记的个数,在后缀树上进行1遍dfs统计,之后根据答案的单调性线性扫描一遍进行统计。#include &lt;...

推荐文章

热门文章

相关标签