最近都在基于ActiveMQ实现安卓端的推送,遇到了一些问题,都记录一下。
ActiveMQ默认情况下使用KahaDB存储数据,网上也有很多持久化消息到MySQL的方法,基本差不多,如这篇所示: Activemq持久化消息到MySql数据库中
可能以前ActiveMQ的版本这样做是可以的,但是我自己经过这样试之后启动activemq.bat时报错,错误信息如下:
nested exception isorg.springframework.beans.factory.Bean
CreationException: Error creating bean withname '(inner bean)#9574cf5' defined
in class path resource [activemq.xml]:Cannot resolve reference to bean 'MySQL-D
S' while setting bean property'dataSource'; nested exception is org.springframe
work.beans.factory.CannotLoadBeanClassException:Cannot find class [org.apache.c
ommons.dbcp.BasicDataSource] for bean withname 'MySQL-DS' defined in class path
resource [activemq.xml]; nested exception isjava.lang.ClassNotFoundException:
org.apache.commons.dbcp.BasicDataSource
主要就是找不到org.apache.commons.dbcp.BasicDataSource 这个类。后来经过网上查找资料,发现ActiveMQ5.14.3版本提供的jar包是commons-dbcp2-2.1.1 包(位置在lib/optional中),所以在activemq.xml中配置MySQL数据源时要把class写作org.apache.commons.dbcp2.BasicDataSource,整体大致如下,其中id要和前面设置的一样,然后用户名密码和url的值根据自己MySQL的配置自己设置:<!-- MySQL DataSource -->
<bean id="MySQL-DS" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/misc?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="+d2C]#9[DA"/>
<property name="poolPreparedStatements" value="true"/>
</bean>