当前位置: 首页 > 知识库问答 >
问题:

如何在Spring集成应用程序中实现SmartLifecycleRoleController

曹渝
2023-03-14

我正在编写基于int-IP:TCPendpoint的客户机-服务器应用程序。用Kotlin写的代码。应用程序包含两个tcp clienst,当它们首先建立了与服务器的连接并进行了一些初始化时,它们应该按照sertain顺序一个接一个地连接到服务器。

作为这种同步的解决方案,我想使用SmartLifecyclerOleController启动依赖tcp客户端的endpoint组。为此,在depended(第二个)客户机中,我将role=“rccluster”auto-startup=“false”属性添加到tcp-outbound-channel-adapter和tcp-inbound-channel-adapter

<int-ip:tcp-connection-factory id="rcClientConnectionFactory"
                               type="client"
                               host="${tdirelay.host}"
                               port="${tdirelay.rcPort}"
                               single-use="false"
                               so-timeout="10000"
                               so-keep-alive="false"
                               serializer="rawSerializerDeserializer"
                               deserializer="rawSerializerDeserializer"
                               ssl-context-support="sslContext"/>


<int-ip:tcp-outbound-channel-adapter id="rcOutBoundAdapter"
                                     channel="rcPacketQueueChannel"
                                     phase="5000"
                                     connection-factory="rcClientConnectionFactory"
                                     role="rcCluster"
                                     auto-startup="false"
/>


<int-ip:tcp-inbound-channel-adapter id="rcInboundAdapter"
                                    channel="rcFromServer"
                                    client-mode="true"
                                    retry-interval="5000"
                                    connection-factory="rcClientConnectionFactory"
                                    role="rcCluster"
                                    auto-startup="false"


/>  

前导(第一个)tcp客户端使用拦截器endpoint根据以下协议与服务器进行序幕交换:

<bean id="dcInterceptorFactoryChain"
      class="org.springframework.integration.ip.tcp.connection.TcpConnectionInterceptorFactoryChain">
    <property name="interceptors">
        <array>
            <bean class="com.tcpclient.DirectCannel.DCConnectionInterceptorFactory">
            </bean>
        </array>
    </property>
</bean>


<int-ip:tcp-connection-factory id="dcClientConnectionFactory"
                               type="client"
                               host="${tdirelay.host}"
                               port="${tdirelay.dcPort}"
                               single-use="false"
                               so-timeout="10000"
                               so-keep-alive="false"
                               interceptor-factory-chain="dcInterceptorFactoryChain"
                               serializer="rawSerializerDeserializer"
                               deserializer="rawSerializerDeserializer"
                               ssl-context-support="sslContext"
/>

我计划在我的拦截器类中调用SmartLifecyclerOleControllerStartLifecyclesInRole(String role)StoplifecyclesInRole(String role)方法。因此,我将@Autowired private val RoleController:SmartLifecycleRoleController添加到InterceptorFactory中,正如Spring-Integration/docs中所解释的那样

我的拦截工厂是:

class DCConnectionInterceptorFactory() : TcpConnectionInterceptorFactory, ApplicationEventPublisherAware {

    @Autowired
    private val roleController: SmartLifecycleRoleController? = null

    @Volatile
    private var applicationEventPublisher: ApplicationEventPublisher? = null

    override fun setApplicationEventPublisher(applicationEventPublisher: ApplicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher
    }

    override fun getInterceptor(): TcpConnectionInterceptorSupport {
        return DCConnectionInterceptor(this.applicationEventPublisher!!, roleController!!)
    }
}

IntelliJ的想法给出警告:不能自取灭亡。未找到“SmartLifecyclerOleController”类型的bean

如果您知道如何做到这一点,请提供一个在xml配置文件中使用SmartLifecyclerOleController类bean的实例。

共有1个答案

唐声
2023-03-14

首先,最好不要在那里使用@autowired,因为不清楚在应用程序上下文中是否启用了注释配置。仅仅因为您只显示了Spring的XML配置。

因此,您的DCConnectionInterceptorFactory应该为RoleController属性设置一个设置器。或者在Kotlin中声明Java bean属性的正确方法是什么...

然后您需要在XML配置中使用如下内容:

<bean class="com.tcpclient.DirectCannel.DCConnectionInterceptorFactory">
    <property name="roleController" ref="integrationLifecycleRoleController"/>
</bean>
 类似资料:
  • 我无法在spring security Integration中找到问题。我已经花了2-3天了。所以,请帮助我。 下面是我的web.xml文件 下面是我的SpringSecurityConfig.xml http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/sc

  • 我尝试在web上搜索,但我找不到任何相关的教程或如何将JNI共享库集成到Spring Boot项目中。我想将GDAL库与一个小型的Spring Boot REST应用程序集成在一起。 有可能将JNI与嵌入式Tomcat一起使用吗? 有人能提供链接或解释如何将编译的jar和实际的库文件包含到Spring Boot项目中吗?Maven将是一个更好的构建选项,但gradle也可以工作。

  • 本文向大家介绍如何在Spring Boot应用程序中实现Spring安全性?相关面试题,主要包含被问及如何在Spring Boot应用程序中实现Spring安全性?时的应答技巧和注意事项,需要的朋友参考一下 实施需要最少的配置。您需要做的就是spring-boot-starter-security在pom.xml文件中添加starter。您还需要创建一个Spring配置类,它将覆盖所需的方法,同时

  • 问题内容: 我有一个使用Spring Batch和Spring MVC的应用程序。我可以将Spring Batch Admin单独部署,并与我的应用程序使用的数据库一起使用,尽管我想将其集成到我自己的应用程序中,还可能会修改其中一些视图。 有没有简单的方法可以做到这一点,还是我必须将其分叉然后从那里去? 问题答案: 根据这个线程显然有一个简单的方法; 在以下位置为Batch Admin定义Disp

  • 我在Tomcat中删除了war文件。 并访问http://localhost:8080/camel-example-servlet-rest-tomcat/api-docs,我得到了这个... {“apiVersion”:“1.2.3”,“swaggerVersion”:“1.2”,“api”:[{“path”:“/User”,“description”:“User rest service”}]

  • 我有一些C语言的遗留程序,它们基于输入文件工作,结果进入输出文件。这两个文件都在程序参数中指定。因此,调用如下所示: 根据Artem Bilan的建议,我用下面的Spring配置文件创建了这个项目。它可以调用可执行文件!然而,我仍然存在出站通道的问题。首先,它不包含任何内容,我得到错误“不支持的消息负载类型”。其次,更重要的是,我需要用Java程序处理输出文件a.out。组织此工作流的最佳方式是什