在Opendaylight Apache Karaf中以服务启动Apache Ignite时如何设置自定义REST端口?
解决Apache Karaf中修改Ignite REST端口失效的问题
我来帮你搞定这个在Karaf里改Ignite REST端口不生效的问题~
问题原因分析
在Eclipse这类普通Java环境里,你通过System.setProperty()提前设置端口属性,Ignite启动时能正常读取到这些全局系统属性。但Apache Karaf是OSGi容器,有类加载隔离机制,而且如果Ignite的bundle在你执行System.setProperty()之前就已经初始化了,或者属性没有在Karaf的全局上下文里生效,就会导致设置失效。
可行的解决方案
1. 在Karaf启动时全局设置系统属性
修改Karaf的启动脚本(比如bin/karaf或bin/karaf.bat),找到JAVA_OPTS的配置部分,添加以下参数:
-DIGNITE_JETTY_PORT=7111 -DIGNITE_JETTY_HOST=localhost
这样Karaf启动时就会把这些属性注入到全局JVM环境中,Ignite启动时就能正确读取到。
2. 通过Karaf控制台动态设置属性
在Karaf控制台里执行以下命令,直接设置系统属性:
config:propset IGNITE_JETTY_PORT 7111 config:propset IGNITE_JETTY_HOST localhost
设置完成后,重启Ignite相关的bundle:
bundle:restart <ignite-bundle-id>
(可以用bundle:list命令找到Ignite对应的bundle ID)
3. 直接在Ignite配置对象中指定端口(最可靠)
放弃依赖系统属性,直接在IgniteConfiguration里配置Jetty REST的参数,这样完全不受OSGi环境的影响:
IgniteConfiguration cfg = new IgniteConfiguration(); // 配置REST端口和主机 JettyRestConfiguration restCfg = new JettyRestConfiguration(); restCfg.setPort(7111); restCfg.setHost("localhost"); cfg.setRestConfiguration(restCfg); // 启动Ignite ignite = Ignition.start(cfg);
这种方式直接把配置绑定到Ignite的启动参数里,不管是普通Java环境还是OSGi容器都能生效。
内容的提问来源于stack exchange,提问作者AksTester
相关产品推荐
相关产品推荐

