备忘启动jetty后log中不断交替出现Connector vm://localhost Started/Stopped

在默认配置下,Activemq会根据topic/queue是否有数据来决定是否保持在内存中的存在,导致不断启动和停止。通过在Spring配置文件中添加<property name=cacheLevelName value=CACHE_CONNECTION/>,可以解决此问题。
启动jetty后log中不断交替出现Connector vm://localhost Started和Connector vm://localhost Stopped,这是activemq引发的问题。

问题的原因是在默认情况下,activemq只有当topic/queue有数据时候才会保持它在内存中的存在。所以当队列或者主题中没有数据时,activemq将不断进行启动和停止的操作。

要解决这一现象,必须在spring配置文件中的activemq的listenercontainer声明时,加上<property name="cacheLevelName" value="CACHE_CONNECTION"/>这句。
加上之后,重新启动,everything done。
如下所示:

<bean id="queueListenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="cacheLevelName" value="CACHE_CONNECTION"/>
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="QUEUE" />
<property name="messageListener" ref="queueListener" />
<property name="transactionManager" ref="jmsTransactionManager" />
<!-- 使用外部事务管理器时设置为true,默认false -->
<property name="sessionTransacted" value="true" />
<property name="concurrency" value="1-100" />



参考资料:
http://forum.springsource.org/showthread.php?86482-ActiveMQ-infinitive-loop-Connector-start-stop
[root@yfw ~]# cd /etc/systemd/system [root@yfw system]# sudo -u openfire tee /opt/openfire/conf/database.properties > /dev/null << 'EOF' > jdbcProvider.className=org.jivesoftware.database.EmbeddedHsqldbProvider > jdbcProvider.connectionString=jdbc:hsqldb:hsql://localhost:9001 > jdbcProvider.username=sa > jdbcProvider.password= > EOF [root@yfw system]# # 确保目录存在 [root@yfw system]# sudo mkdir -p /opt/openfire/embedded-db [root@yfw system]# [root@yfw system]# # 清空旧内容(防止冲突) [root@yfw system]# sudo rm -f /opt/openfire/embedded-db/* [root@yfw system]# [root@yfw system]# # 赋权 [root@yfw system]# sudo chown -R openfire:openfire /opt/openfire/embedded-db [root@yfw system]# pkill -f openfire [root@yfw system]# /opt/openfire/bin/start.sh Using Java: /usr/lib/jvm/java-17-openjdk/bin/java Java Version: openjdk version "17.0.1" 2021-10-19 LTS OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS) OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing) Classpath: /opt/openfire/lib/activation-1.1.jar:/opt/openfire/lib/apache-el-9.0.107.jar:/opt/openfire/lib/apache-jsp-9.0.107.jar:/opt/openfire/lib/asm-9.8.jar:/opt/openfire/lib/asm-commons-9.8.jar:/opt/openfire/lib/asm-tree-9.8.jar:/opt/openfire/lib/bcpg-jdk18on-1.78.1.jar:/opt/openfire/lib/bcpkix-jdk18on-1.78.1.jar:/opt/openfire/lib/bcprov-jdk18on-1.78.1.jar:/opt/openfire/lib/bcutil-jdk18on-1.78.1.jar:/opt/openfire/lib/caffeine-3.2.0.jar:/opt/openfire/lib/checker-qual-3.33.0.jar:/opt/openfire/lib/common-image-3.9.4.jar:/opt/openfire/lib/common-io-3.9.4.jar:/opt/openfire/lib/common-lang-3.9.4.jar:/opt/openfire/lib/commons-codec-1.15.jar:/opt/openfire/lib/commons-dbcp2-2.9.0.jar:/opt/openfire/lib/commons-ip-math-1.32.jar:/opt/openfire/lib/commons-lang3-3.18.0.jar:/opt/openfire/lib/commons-logging-1.2.jar:/opt/openfire/lib/commons-pool2-2.9.0.jar:/opt/openfire/lib/commons-text-1.10.0.jar:/opt/openfire/lib/dom4j-2.1.4.jar:/opt/openfire/lib/dwr-3.0.2-RELEASE.jar:/opt/openfire/lib/ecj-3.33.0.jar:/opt/openfire/lib/error_prone_annotations-2.18.0.jar:/opt/openfire/lib/failureaccess-1.0.1.jar:/opt/openfire/lib/guava-32.0.1-jre.jar:/opt/openfire/lib/hsqldb-2.7.1.jar:/opt/openfire/lib/httpclient-4.5.13.jar:/opt/openfire/lib/httpcore-4.4.13.jar:/opt/openfire/lib/i18n-5.0.2.jar:/opt/openfire/lib/imageio-bmp-3.9.4.jar:/opt/openfire/lib/imageio-core-3.9.4.jar:/opt/openfire/lib/istack-commons-runtime-3.0.11.jar:/opt/openfire/lib/j2objc-annotations-2.8.jar:/opt/openfire/lib/jakarta.activation-1.2.2.jar:/opt/openfire/lib/jakarta.annotation-api-1.3.5.jar:/opt/openfire/lib/jakarta.transaction-api-1.3.3.jar:/opt/openfire/lib/jakarta.xml.bind-api-2.3.3.jar:/opt/openfire/lib/jansi-1.18.jar:/opt/openfire/lib/javax.activation-api-1.2.0.jar:/opt/openfire/lib/javax.mail-1.6.2.jar:/opt/openfire/lib/jaxb-api-2.3.1.jar:/opt/openfire/lib/jaxb-runtime-2.3.3.jar:/opt/openfire/lib/jaxen-1.2.0.jar:/opt/openfire/lib/jcip-annotations-1.0.jar:/opt/openfire/lib/jcl-over-slf4j-2.0.9.jar:/opt/openfire/lib/jetty-ee-12.0.24.jar:/opt/openfire/lib/jetty-ee8-annotations-12.0.24.jar:/opt/openfire/lib/jetty-ee8-apache-jsp-12.0.24.jar:/opt/openfire/lib/jetty-ee8-nested-12.0.24.jar:/opt/openfire/lib/jetty-ee8-plus-12.0.24.jar:/opt/openfire/lib/jetty-ee8-security-12.0.24.jar:/opt/openfire/lib/jetty-ee8-servlet-12.0.24.jar:/opt/openfire/lib/jetty-ee8-webapp-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-api-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-common-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-jetty-server-12.0.24.jar:/opt/openfire/lib/jetty-ee8-websocket-servlet-12.0.24.jar:/opt/openfire/lib/jetty-http-12.0.24.jar:/opt/openfire/lib/jetty-io-12.0.24.jar:/opt/openfire/lib/jetty-jmx-12.0.24.jar:/opt/openfire/lib/jetty-jndi-12.0.24.jar:/opt/openfire/lib/jetty-plus-12.0.24.jar:/opt/openfire/lib/jetty-security-12.0.24.jar:/opt/openfire/lib/jetty-server-12.0.24.jar:/opt/openfire/lib/jetty-servlet-api-4.0.6.jar:/opt/openfire/lib/jetty-session-12.0.24.jar:/opt/openfire/lib/jetty-util-12.0.24.jar:/opt/openfire/lib/jetty-websocket-core-common-12.0.24.jar:/opt/openfire/lib/jetty-websocket-core-server-12.0.24.jar:/opt/openfire/lib/jetty-xml-12.0.24.jar:/opt/openfire/lib/jmdns-1.0.jar:/opt/openfire/lib/jsmpp-2.3.10.jar:/opt/openfire/lib/json-20231013.jar:/opt/openfire/lib/jspecify-1.0.0.jar:/opt/openfire/lib/jsr305-3.0.2.jar:/opt/openfire/lib/jtds-1.3.1.jar:/opt/openfire/lib/jzlib-1.1.3.jar:/opt/openfire/lib/libidn-1.35.jar:/opt/openfire/lib/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/opt/openfire/lib/log4j-api-2.20.0.jar:/opt/openfire/lib/log4j-core-2.20.0.jar:/opt/openfire/lib/log4j-slf4j2-impl-2.20.0.jar:/opt/openfire/lib/mssql-jdbc-9.4.1.jre11.jar:/opt/openfire/lib/mysql-connector-j-8.2.0.jar:/opt/openfire/lib/netty-all-4.1.118.Final.jar:/opt/openfire/lib/netty-buffer-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-dns-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-haproxy-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-http2-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-http-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-memcache-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-mqtt-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-redis-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-smtp-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-socks-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-stomp-4.1.118.Final.jar:/opt/openfire/lib/netty-codec-xml-4.1.118.Final.jar:/opt/openfire/lib/netty-common-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-proxy-4.1.118.Final.jar:/opt/openfire/lib/netty-handler-ssl-ocsp-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-classes-macos-4.1.118.Final.jar:/opt/openfire/lib/netty-resolver-dns-native-macos-4.1.118.Final-osx-aarch_64.jar:/opt/openfire/lib/netty-resolver-dns-native-macos-4.1.118.Final-osx-x86_64.jar:/opt/openfire/lib/netty-transport-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-classes-epoll-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-classes-kqueue-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-aarch_64.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-riscv64.jar:/opt/openfire/lib/netty-transport-native-epoll-4.1.118.Final-linux-x86_64.jar:/opt/openfire/lib/netty-transport-native-kqueue-4.1.118.Final-osx-aarch_64.jar:/opt/openfire/lib/netty-transport-native-kqueue-4.1.118.Final-osx-x86_64.jar:/opt/openfire/lib/netty-transport-native-unix-common-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-rxtx-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-sctp-4.1.118.Final.jar:/opt/openfire/lib/netty-transport-udt-4.1.118.Final.jar:/opt/openfire/lib/ojdbc11-23.7.0.25.01.jar:/opt/openfire/lib/ons-23.7.0.25.01.jar:/opt/openfire/lib/oraclepki-23.7.0.25.01.jar:/opt/openfire/lib/orai18n-23.7.0.25.01.jar:/opt/openfire/lib/postgresql-42.7.7.jar:/opt/openfire/lib/rsi-23.7.0.25.01.jar:/opt/openfire/lib/shaj-0.5.jar:/opt/openfire/lib/simplefan-23.7.0.25.01.jar:/opt/openfire/lib/sitemesh-2.5.0.jar:/opt/openfire/lib/slf4j-api-2.0.9.jar:/opt/openfire/lib/startup.jar:/opt/openfire/lib/taglibs-standard-impl-1.2.5.jar:/opt/openfire/lib/taglibs-standard-spec-1.2.5.jar:/opt/openfire/lib/tinder-2.1.0.jar:/opt/openfire/lib/txw2-2.3.3.jar:/opt/openfire/lib/ucp-23.7.0.25.01.jar:/opt/openfire/lib/xdb-23.7.0.25.01.jar:/opt/openfire/lib/xmppserver-5.0.2.jar:/opt/openfire/lib/xpp3-1.1.4c.0.jar Starting OpenFire... OpenFire started (PID 1110116) Check logs: tail -f /opt/openfire/logs/nohup.out [root@yfw system]# tail -f /opt/openfire/logs/nohup.out DEBUG: User = openfire DEBUG: Current dir = /opt/openfire DEBUG: OPENFIRE_HOME = /opt/openfire DEBUG: Java executable = /usr/lib/jvm/java-17-openjdk/bin/java openjdk version "17.0.1" 2021-10-19 LTS OpenJDK Runtime Environment 21.9 (build 17.0.1+12-LTS) OpenJDK 64-Bit Server VM 21.9 (build 17.0.1+12-LTS, mixed mode, sharing) DEBUG: Launching OpenFire... Database setup or configuration error: Please verify your database settings and check the logs/openfire.log file for detailed error messages. java.lang.IllegalArgumentException: java.sql.SQLException: ConnectionManager.getConnection() failed to obtain a connection after 11 attempts. The exception from the last attempt is as follows: java.sql.SQLException: Check JDBC properties; data source was not be initialised at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:1020) at org.jivesoftware.openfire.XMPPServer.start(XMPPServer.java:666) at org.jivesoftware.openfire.XMPPServer.<init>(XMPPServer.java:221) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) at java.base/java.lang.reflect.ReflectAccess.newInstance(ReflectAccess.java:128) at java.base/jdk.internal.reflect.ReflectionFactory.newInstance(ReflectionFactory.java:347) at java.base/java.lang.Class.newInstance(Class.java:645) at org.jivesoftware.openfire.starter.ServerStarter.start(ServerStarter.java:92) at org.jivesoftware.openfire.starter.ServerStarter.main(ServerStarter.java:56) Caused by: java.sql.SQLException: ConnectionManager.getConnection() failed to obtain a connection after 11 attempts. The exception from the last attempt is as follows: java.sql.SQLException: Check JDBC properties; data source was not be initialised at org.jivesoftware.database.DbConnectionManager.getConnection(DbConnectionManager.java:204) at org.jivesoftware.openfire.XMPPServer.verifyDataSource(XMPPServer.java:1010) ... 11 more Error starting the server. Please check the log files for more information.
最新发布
11-16
我们已经进入了最后的攻坚阶段!🎯 你已经完成了所有关键步骤: - ✅ 清理了数据库残留 - ✅ 设置 `openfire.xml` 中 `<setup>true</setup>` - ✅ 创建了 `database.properties` - ✅ 权限正确 - ✅ 启动脚本能运行 Java 进程 但仍然报错: ``` java.sql.SQLException: Check JDBC properties; data source was not be initialised ``` --- ## 🔍 深入源码分析:OpenFire 数据库初始化流程 这个错误的核心在于 OpenFire 的 **数据库提供者(Connection Provider)没有被正确加载**。 它依赖于两个文件: 1. `conf/openfire.xml` → 决定是否进入 setup 模式 2. `conf/database.properties` → 决定使用哪种数据库 但如果 `database.properties` 被忽略或格式错误,即使存在也会导致“未初始化”。 --- ## 🚨 关键发现:`EmbeddedHsqldbProvider` 类名已变更! 在 **OpenFire 5.0+** 版本中,内嵌 HSQLDB 提供商的类名已经从: ```java org.jivesoftware.database.EmbeddedHsqldbProvider ``` **改为了**: ```java org.jivesoftware.database.HSQLDBConnectionProvider ``` 👉 你当前使用的类名是旧的,所以 OpenFire 无法识别你的配置 → 直接跳过 → 抛出 “data source not initialized” 错误。 --- ## ✅ 正确解决方案:更新 `database.properties` 使用新类名 ### 🔧 执行以下命令重建配置文件: ```bash sudo -u openfire tee /opt/openfire/conf/database.properties > /dev/null << 'EOF' jdbcProvider.className=org.jivesoftware.database.HSQLDBConnectionProvider jdbcProvider.connectionString=jdbc:hsqldb:hsql://localhost:9001 jdbcProvider.username=sa jdbcProvider.password= EOF ``` > ✅ 注意:`HSQLDBConnectionProvider` 是 OpenFire 5.0+ 的新类名 --- ## 📂 补充验证:确认该类存在于 JAR 包中 我们可以手动检查 `xmppserver-5.0.2.jar` 是否包含这个类: ```bash jar -tf /opt/openfire/lib/xmppserver-5.0.2.jar | grep HSQLDBConnectionProvider ``` 你应该看到输出: ``` org/jivesoftware/database/HSQLDBConnectionProvider.class ``` ✅ 如果有这条,说明类存在,只是之前配置写错了。 --- ## ✅ 第二步:确保 `embedded-db` 可写且为空 ```bash # 清空旧数据(防止冲突) sudo rm -f /opt/openfire/embedded-db/* # 确保权限 sudo chown -R openfire:openfire /opt/openfire/embedded-db ``` --- ## ✅ 第三步:重启服务并查看日志 ```bash pkill -f openfire /opt/openfire/bin/start.sh tail -f /opt/openfire/logs/nohup.out ``` --- ## ✅ 成功应有的输出(重点关注): ```log INFO [main] Starting embedded database server... INFO [main] Database: HSQL Database Engine, version: 2.7.1 INFO [main] Installing default database schema... INFO [main] Executing SQL script: /opt/openfire/resources/database/hsql/initialSchema.sql INFO [main] Database setup finished successfully. INFO [main] Starting admin console at http://0.0.0.0:9090 INFO [main] Jetty server started ``` 如果你看到这些日志,恭喜你!🎉 OpenFire 已经成功启动,并将自动创建数据库结构。 --- ## 🌐 浏览器访问安装向导 打开浏览器访问: 👉 http://你的服务器IP:9090 你会看到 OpenFire 安装页面,可以进行以下操作: 1. 选择语言 2. 数据库设置 → 应显示 “Using embedded database” 3. 设置管理员邮箱和密码 4. 设置服务器域名(如 `yfw.local`) 5. 完成安装 → 登录控制台 --- ## ✅ 总结修复要点 | 问题 | 解决方案 | |------|----------| | ❌ 使用了过时的 `EmbeddedHsqldbProvider` 类名 | ✅ 改为 `HSQLDBConnectionProvider` | | ⚠️ `database.properties` 不生效 | ✅ 类名错误导致解析失败 | | 💥 “data source not initialised” | ✅ 实际原因是 provider 未找到 | | 🔄 多次清理无效 | ✅ 必须同时修正类名 + 权限 + 配置路径 | --- ## ✅ 推荐最终部署脚本(一键搞定) ```bash #!/bin/bash # deploy-openfire-final.sh OPENFIRE_HOME=/opt/openfire USER=openfire echo "Stopping existing OpenFire..." pkill -f openfire || true echo "Cleaning up old data..." rm -rf $OPENFIRE_HOME/embedded-db/* rm -rf $OPENFIRE_HOME/work/* rm -rf $OPENFIRE_HOME/temp/* echo "Writing openfire.xml (setup mode)..." cat > $OPENFIRE_HOME/conf/openfire.xml << 'EOF' <?xml version="1.0" encoding="UTF-8"?> <jive> <adminConsole> <port>9090</port> <securePort>9091</securePort> </adminConsole> <locale>en</locale> <setup>true</setup> </jive> EOF echo "Writing database.properties (correct class name)..." cat > $OPENFIRE_HOME/conf/database.properties << 'EOF' jdbcProvider.className=org.jivesoftware.database.HSQLDBConnectionProvider jdbcProvider.connectionString=jdbc:hsqldb:hsql://localhost:9001 jdbcProvider.username=sa jdbcProvider.password= EOF echo "Setting permissions..." chown -R $USER:$USER $OPENFIRE_HOME/{conf,database.properties,logs,embedded-db,work,temp} echo "Starting OpenFire..." $OPENFIRE_HOME/bin/start.sh echo "View logs: tail -f $OPENFIRE_HOME/logs/nohup.out" echo "Access web UI: http://$(hostname -I | awk '{print $1}'):9090" ``` 保存为 `deploy.sh` 并运行: ```bash chmod +x deploy.sh ./deploy.sh ``` --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值