技术标签: 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的活动连接
//客户端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...
最近更新时间:2017年7月6日15:30:40《我的博客地图》 Ajax,Asyncchronous JavaScropt and Xml,异步js和xml,是一种异步请求的技术,这项技术能够向服务器请求额外数据,而无需卸载页面。 Ajax技术的核心是XMLHttpRequest对象(简称XHR)。1、原生js封装XHR对象function createXHR()...
通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析。分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法对于待比较的文本数据不多时还比较好用,如果我们的爬虫每天采集的数据以千万计算,我们如何对于这些海量千万级的数据进行高效的合并去重。最简单的做法是拿着待比较的文本...
点击上方「嵌入式大杂烩」,选择「置顶公众号」第一时间查看嵌入式笔记!1、前言 开发板上有AP3216三合一整合型光感测器,看了看出厂SDK包中并未添加相关驱动。本次我们就一起来学习一下。2...
谈谈电气图纸设计结构1一基本知识在自控领域,经历了若干年的思考和实践后,总想把自己的一些想法总结出来,也算是人到了一定年龄,希望自己领悟到的一些东西不要被埋没的意思吧。逛了很多论坛,最后发现还是在博客里面写文章,能对文章有比较系统性的管理,初略规划了一下,想从自动化电气设计/PLC编程/OPC编程/计算机编程等几个方面谈谈自己的思考。首先从网上找到了我在2008年在亿万论坛上发的帖子(事实上找的是曹大平收集和整理的部分,非常感谢这位有心人),作为博客中电气设计部分内容的引子,以下内容是2008年发表
一、启动vim: 在命令行窗口中输入以下命令即可: 1.Vim 直接启动vim 2.Vim filename 打开vim并创建名为filename的文件二、文件命令 1.打开单个文件 vim file 2.同时打开多个文件 vime file1 file2 file3 3.在vim窗口中打开一个新文件 :open file 4.在新窗口中打开文件 ...
【重学webpack系列——webpack5.0】1-15节主要讲webpack的使用,当然,建议结合《webpack学完这些就够了》一起学习。从本节开始,专攻webpack原理,只有深入原理,才能学到webpack设计的精髓,从而将技术点运用到实际项目中。可以点击上方专栏订阅哦。以下是本节正文:1.浏览器调试在node环境执行以下命令,会生成一个服务地址node --inspect-brk ./node_modules/webpack-cli/bin/cli.js浏览器打
思想和前段时间的1151差不多,都是通过扫描线的移动来计算周长,不同的是要通过对与x轴平行的扫描线扫一次,与y轴平行的扫描线扫一次,扫描两次得到周长。变量last为记录上一次扫描得到的长度,sum为记录这一次总共扫描得到的长度。abs(sum-last)即为所扫描到的一次长度,非常耐人寻味的是,我询问学长为什么可以这样做的时候,学长提到了
最近许多用户都升级了Windows11系统,而Windows11最大的特点就是比Win10流畅。但是不少用户在使用Excel的时候发现自己的电脑变得非常的卡,没办法正常使用,这要怎么解决呢?下面小编就带着大家一起看看吧!更多Windows11系统教程可以参考小白装机网。操作方法:1、点击“文件”-“选项”2、点击“常规”选项卡,取消勾选显示开始屏幕3、选择“加载项”-“管理(Excel加载)”-“转到”4、取消所有宏5、选择“加载项”-“管理(Com加载)”-“转
void CVTKMFCDlg::OnBnClickedButton1(){ // TODO: 在此添加控件通知处理程序代码CRect rect; m_dixing.GetClientRect(&rect); //显示在MFC上的静态文本框中 // create sphere geometry vtkSphereSource *sphere = vtkSphereS
复制功能在任何一个编辑软件中都是必不可少、使用率很高的一个功能,在矢量图形设计软件CorelDRAW 中也不例外。关于对象的复制这里就不过多示意了,主要为大家示范一下如何在设计中复制对象的一些属性。一、复制属性按钮在CorelDRAW的编辑菜单下,有一个叫做“复制属性自…”的按钮,这个功能键可以实现对对象的几个属性(轮廓笔、轮廓色、填充和文本)的复制。这里做一个简单的案例示范:将一个圆形的轮廓线和填充复制到另一个椭圆上。1、绘制一个圆形并为其添加填充颜色和轮廓线。要注意这里的颜色的填充不要使
SPOJ NSUBSTRProblem : 给一个长度为n的字符串,要求分别输出长度为1~n的子串的最多出现次数。Solution :首先对字符串建立后缀自动机,在根据fail指针建立出后缀树,对于n个后缀对应的节点打上标记,则每个结点对应的一些子串所出现的次数即为其子树内标记的个数,在后缀树上进行1遍dfs统计,之后根据答案的单调性线性扫描一遍进行统计。#include <...