struts2 - spring -hibernate -proxool配置

xiechunmei13 2009-07-28 10:31:47
struts2 - spring -hibernate -proxool配置
项目做完了。可是项目的性能相当的差。上面说检查下是不是连接池没有关闭导致很快将池填满了?

为此我就想做个连接池监测下信息。

首先

按照网上的例子谢了

proxool.xml

-----------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
<proxool>

<!--为数据源指定一个别名-->
<alias>DB</alias>
<driver-url>jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>

<driver-properties>

<!--数据库登陆用户名-->
<property name="user" value="root" />

<!--数据库登陆用户密码-->
<property name="password" value="root" />
</driver-properties>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的
用户连接就不会被接受(正式库10,测试库1)-->
<maximum-new-connections>20</maximum-new-connections>
<!-- 最少保持的空闲连接数(正式库10,测试库1)-->
<prototype-count>10</prototype-count>
<!-- 连接池允许的最大连接数(正式库700,测试库10)-->
<maximum-connection-count>1000</maximum-connection-count>
<!-- 连接池开启的最小连接数(正式库350,测试库5)-->
<minimum-connection-count>350</minimum-connection-count>

<!-- 一个活动连接的最长时间15分钟,单位毫秒 -->
<maximum-active-time>900000</maximum-active-time>
<!-- 一个连接的最长活动时间4小时,单位毫秒 -->
<maximum-connection-lifetime>14400000</maximum-connection-lifetime>
<!-- 自动检查连接是否断掉开关 -->
<test-before-use>true</test-before-use>
<!-- 自动检查连接是否断的测试sql语句 -->
<house-keeping-test-sql>select sysdate() from dual</house-keeping-test-sql>
</proxool>
</proxool-config>

--------------------------------------------------------------------------------------------------------

this is db.xml(spring)

--------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.logicalcobwebs.proxool.ProxoolDriver</value>
</property>
<property name="url">

<!--这里url引用上面指定的别名 proxool.DB-->
<value>proxool.DB</value>
</property>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:com/mobile/hbm/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
</beans>

--------------------------------------------------------------------------------------------------------------

this is web.xml 问题在这里产生了。

网上找了很多例子都说必须将

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

替换成

<servlet>
<servlet-name>contextConfigLocation</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

替换后出现问题了。spring 不可以没有监听器的存在。必须加入。

不替换直接用listener则出现

java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'DB'

这个错误。网上说出现这个错误就是要把listener替换掉。

替换掉有出了错。

我现在不知道怎么办了。

继续网上搜索。看到一篇blog写到相同的错误。

blog中说道:

,但有个问题,那就struts2与spring进行整合时,web.xml中的spring加载必须使listener来加载,如果使用ContextLoderServlet,则会出空指向异常,报的是Struts2的objectFactory中的某处,因为绝大多数WEB容器的加载顺序是:Listener,Filter,Servlet,所以将会现struts2在spring前加载,它就找不到spring的管理容器,产生异常,解决办法使用ContextLoderListener来加载spring,好,这样一来又有问题了,spring出异常了,它又会找不到我们在applicationContext.xml所提供的数据源的别名,即:proxool.DbPool,无法管理数据库连接池了,看来struts2与proxool是鱼与熊掌,二者不可兼得,貌似我们现在没办法了,怎么办?
方法一:不用proxool(废话,不用它还写这篇文章干嘛);
方法二:将proxool的加载由servlet更改成使用listener加载,但proxool官方并没有提供给我们可用于listener加载的类,我们可以自己写一个listener来实现.

按照他的方法写了个监听类。依然存在问题。




--------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>contextConfigLocation</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet>
<servlet-name>Admin </servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.admin.servlet.AdminServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Admin</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
<!-- spring配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-config/*.xml</param-value>
</context-param>

<!-- log4j属性文件位置 -->
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.properties</param-value>
</context-param>

<!-- 延迟会话到view界面后在关闭-->
<filter>
<filter-name>openSession</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<!-- struts2在请求前清理以前请求留下的Action实例 -->
<filter>
<filter-name>struts2-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>


<filter-mapping>
<filter-name>struts2-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- Struts2的过滤器-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
----------------------------------------------------------------------------------------

现在又出现这种问题了:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"

请问:

org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'DB'这个问题到底该怎么解决?

如果有struts2-spring-plugin-2.0.11.jar这个jar就必须得写监听器listener.

网上还有很多少把这个去掉。

我试着去掉了还是不行,

出现:

Cannot locate the chosen ObjectFactory implementation: spring - [unknown location]

现在这个proxool的配置到底要怎么配?

最后的web.xml到底怎么写才正确呢???????

它到底是怎样的一个思维?

谁能帮帮我?



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xiechunmei13/archive/2009/07/25/4379950.aspx
...全文
1132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelhyl 2011-07-18
  • 打赏
  • 举报
回复
还是不行呀,<property name="delegateProperties">
<value>user=bestvsns,password=bestvwin
</value>
</property> 什么意思
xiongyuanming 2010-06-14
  • 打赏
  • 举报
回复
下面两个参数 在在引用这个包proxool-0.9.1.jar 时 会出现异常 <property name="maximumConnectionLifetime">
<value>14400000</value>
</property>

<property name="houseKeepingSleepTime">
<value>90000</value>
</property>
换成 proxool-0.9.0rc3.jar 就行了
xiongyuanming 2010-06-14
  • 打赏
  • 举报
回复
楼主 正道
zrcai 2009-08-07
  • 打赏
  • 举报
回复
挺复杂的!
xiechunmei13 2009-08-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiechunmei13 的回复:]
为什么没人来看一下啊?
分给谁都不知道。
晕死。。。。。
[/Quote]
是的。我的那个配置在浏览器中输入http://ip地址:端口号/项目名称/admin
就可以监测连接池里的状态信息。
xiechunmei13 2009-08-07
  • 打赏
  • 举报
回复
终于等到一个看帖的人了啊。送分。
iamdanielleela 2009-08-07
  • 打赏
  • 举报
回复
proxool有连接池监控的web端.
xiechunmei13 2009-08-04
  • 打赏
  • 举报
回复
为什么没人来看一下啊?
分给谁都不知道。
晕死。。。。。
xiechunmei13 2009-08-01
  • 打赏
  • 举报
回复
乱码问题我换成了tomcat5.5就不会了。不知道原因何在、
没人看帖。在此结贴。
问题已解决。
但始终还不太明白。
xiechunmei13 2009-07-28
  • 打赏
  • 举报
回复
现在我把上面所写的方法改成了。
this is db.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource"
class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver"
value="com.mysql.jdbc.Driver">
</property>

<property name="driverUrl"
value="jdbc:mysql://localhost:3306/books?useUnicode=true&characterEncoding=utf-8">
</property>
<property name="user" value="root"></property>
<property name="password" value="root"></property>
<property name="alias">
<value>DB</value>
</property>
<property name="delegateProperties">
<value>user=bestvsns,password=bestvwin</value>
</property>

<!-- 自动检查连接是否断掉开关 -->
<property name="testBeforeUse">
<value>true</value>
</property>
<!-- 自动检查连接是否断的测试sql语句 -->
<property name="houseKeepingTestSql">
<value>select sysdate() from dual</value>
</property>
<!-- 一个活动连接的最长时间15分钟,单位毫秒 -->
<property name="maximumActiveTime">
<value>900000</value>
</property>
<!-- 一个连接的最长活动时间4小时,单位毫秒 -->
<property name="maximumConnectionLifetime">
<value>14400000</value>
</property>
<property name="houseKeepingSleepTime">
<value>90000</value>
</property>
<property name="prototypeCount">
<value>5</value>
</property>
<property name="maximumConnectionCount">
<value>100</value>
</property>
<property name="minimumConnectionCount">
<value>10</value>
</property>
<property name="trace">
<value>true</value>
</property>
<property name="verbose">
<value>true</value>
</property>
</bean>


<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="mappingDirectoryLocations">
<list>
<value>classpath:com/mobile/hbm/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
</bean>
</beans>
将proxool.xml内容直接写入db.xml中不用导入形式。

现在可以运行了。
但是执行
http://localhost:8080/项目名/admin
查看连接状态时
点击 Snapshot 就会有iso-8859-1编码问题。
这个又该怎么解决啊?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧