Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring引导上下文一直试图连接到JavaRMI服务器,但失败了_Java_Spring_Spring Boot - Fatal编程技术网

Spring引导上下文一直试图连接到JavaRMI服务器,但失败了

Spring引导上下文一直试图连接到JavaRMI服务器,但失败了,java,spring,spring-boot,Java,Spring,Spring Boot,首先,我是春天的新手 我正在使用Spring服务来监视电子邮件帐户,并在添加新邮件时进行操作。 我的Spring头代码是: @Component public class EmailMonitor implements ApplicationListener<ContextRefreshedEvent> { private static final Logger log = LoggerFactory.getLogger(EmailMonitor.class); @

首先,我是春天的新手

我正在使用Spring服务来监视电子邮件帐户,并在添加新邮件时进行操作。 我的Spring头代码是:

@Component
public class EmailMonitor implements ApplicationListener<ContextRefreshedEvent> {
    private static final Logger log = LoggerFactory.getLogger(EmailMonitor.class);

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
       // monitor emails
...
}
然后程序结束,这时它应该等待并收听javax电子邮件帐户通知程序


有什么想法吗?我不确定RMI服务器在这个上下文中的角色是什么(我很难找到绑定Spring和RMI的文档引用)。我的理解是Spring将启动它所需的服务,但显然不是在这种情况下。

我认为您误解了Spring上下文侦听器的概念

Spring应用程序上下文在Spring驱动的应用程序启动期间启动。 它有各种各样的“钩子”——一旦发生,你可以倾听并得到通知。所以,是的,可以刷新上下文,当它发生时,侦听器“激发”并执行代码。但仅此而已,当上下文开始时,它实际上不会做任何有用的事情。例如,您可以阅读上下文事件

因此,考虑到这一点,基本上您的应用程序上下文会刷新一次,并且在应用程序启动期间侦听器也只会被调用一次

现在我不明白RMI服务器与这一切有什么关系:)您可以从侦听器中删除
@组件
注释并重新启动应用程序,它可能仍会搜索RMI服务器(请尝试并在注释或其他内容中更新)

所以首先,我想你应该试着理解RMI是如何与所有这些相关的,我认为系统中还有一些其他的组件通过spring boot加载并搜索RMI。也许你可以做一个线程转储或者别的什么,看看哪个线程能真正与RMI一起工作


要获得“添加邮件时”事件是一件完全不同的事情,您可能必须自己实现它,或者如果使用电子邮件的第三方具有这样的功能,请尝试找到如何使用第三方API实现它,但可以肯定的是,这不是一个ContextRefreshed事件。

要检查电子邮件并对其进行操作,您可能最好使用Spring集成,它具有现成的功能

关于你的问题,我怀疑你误解了答案。它可以用来接收通过Spring的内部事件API触发的事件。它不会像Kafka或JMS的侦听器那样启动侦听器线程。尽管两位听众都有自己的感觉,但他们完全不同


但正如前面提到的,您可能更适合使用Spring集成,这样您就不用编写自己的了。

它应该等待,因为?如果没有任何东西使进程保持活动状态,它将启动并直接关闭。因此,除非您在ApplicationEvent的
中创建线程,否则不会发生任何事情。也许您是对的。然而,我的理解是,“只要侦听器对象在Spring应用程序上下文中注册,它就会接收事件。当Spring路由事件时,它会使用侦听器的签名来确定它是否匹配事件。”所以Spring不让它保持活动以保持侦听吗?不,它不让它保持活动。它是一个内部Spring甚至监听器,而不是JMS、Kafka等监听器,将为其启动一个进程进行监视。而且只有1个
ContextRefreshedEvent
将被解雇。另外,我建议使用Spring集成,它具有即时邮件支持,可以完成所有这些工作,而不是编写自己的。这将更加有用@迪纳姆先生,你能补充一下(和参考资料)作为回答吗?我会接受的?
"RMI TCP Connection(1)-192.168.1.18: name = \"[Ljava.rmi.server.ObjID;\", codebase = \"\", defaultLoader = jdk.internal.loader.ClassLoaders$PlatformClassLoader@332228c4","logger_name":"sun.rmi.loader"...
...
{"@timestamp":"2021-05-10T17:01:22.212+01:00","@version":"1","message":"RMI TCP Connection(1)-192.168.1.18: name = \"javax.management.ObjectName\", codebase = \"\"","logger_name":"sun.rmi.loader","thread_name":"RMI TCP Connection(1)-192.168.1.18","level":"DEBUG","level_value":10000,"appname":"email-notifier"}
{"@timestamp":"2021-05-10T17:01:22.213+01:00","@version":"1","message":"connectionId=rmi://192.168.1.18  4, name=org.springframework.boot:type=Admin,name=SpringApplication, attribute=Ready","logger_name":"javax.management.remote.rmi","thread_name":"RMI TCP Connection(1)-192.168.1.18","level":"DEBUG","level_value":10000,"appname":"email-notifier"}
{"@timestamp":"2021-05-10T17:01:22.213+01:00","@version":"1","message":"RMI TCP Connection(1)-192.168.1.18: [192.168.1.18] exception: ","logger_name":"sun.rmi.server.call","thread_name":"RMI TCP Connection(1)-192.168.1.18","level":"DEBUG","level_value":10000,"stack_trace":"javax.management.InstanceNotFoundException: org.springframework.boot:type=Admin,name=SpringApplication\n\tat java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getMBean(DefaultMBeanServerInterceptor.java:1083)\n\tat java.management/com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:637)\n\tat java.management/com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)\n\tat java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1443)\n\tat java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)\n\tat java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)\n\tat java.management.rmi/javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:637)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:567)\n\tat java.rmi/sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)\n\tat java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:200)\n\tat java.rmi/sun.rmi.transport.Transport$1.run(Transport.java:197)\n\tat java.base/java.security.AccessController.doPrivileged(AccessController.java:691)\n\tat java.rmi/sun.rmi.transport.Transport.serviceCall(Transport.java:196)\n\tat java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:587)\n\tat java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:828)\n\tat java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:705)\n\tat java.base/java.security.AccessController.doPrivileged(AccessController.java:391)\n\tat java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:704)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)\n\tat java.base/java.lang.Thread.run(Thread.java:831)\n","appname":"email-notifier"}
{"@timestamp":"2021-05-10T17:01:22.214+01:00","@version":"1","message":"[javax.management.remote.rmi.RMIConnectionImpl@6d666aa: connectionId=rmi://192.168.1.18  4] closing.","logger_name":"javax.management.remote.rmi","thread_name":"RMI TCP Connection(1)-192.168.1.18","level":"DEBUG","level_value":10000,"appname":"email-notifier"}
{"@timestamp":"2021-05-10T17:01:22.214+01:00","@version":"1","message":"[javax.management.remote.rmi.RMIConnectionImpl@6d666aa: connectionId=rmi://192.168.1.18  4] closed.","logger_name":"javax.management.remote.rmi","thread_name":"RMI TCP Connection(1)-192.168.1.18","level":"DEBUG","level_value":10000,"appname":"email-notifier"}