Need Help with Solace Debezium Connector

Hi Community,

I’m new to both Solace and Change Data Capture (CDC). I recently discovered the Solace Debezium connector and attempted to get it working using both the JAR and Docker methods. However, I’ve encountered issues with the provided application.yml and docker-compose.yml sample configurations.

Despite trying to adjust the workflow based on the official documentation, I’m still facing errors during startup. Unfortunately, I haven’t had success getting the connector to run properly.

If anyone has a working setup with any database (PostgreSQL, MySQL, etc.), I would greatly appreciate it if you could share a sample, working copy of your application.yml and any other relevant files.

Your help would mean a lot to me as I’m trying to get familiar with this integration. Thank you in advance!

Best regards,
Jay

D:\SOLACE\CONNECTORS\pubsubplus-connector-debezium-3.0.0>java -jar pubsubplus-connector-debezium-3.0.0.jar --spring.config.additional-location=file:samples/config/
pubsubplus-connector-debezium Version 3.0.0

Copyright 2023-2025 Solace Corporation

Licensed under the Solace Community License v.1.0 (the "License")
a copy of which is provided to you with the source code; you may not use
this file except in compliance with the License.  You may also obtain a copy of the
License at

https://solace.com/license-community/

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OF ANY KIND, either express or implied.  See the License for the
specific language governing permissions and limitations under the License.

To purchase product support, please contact Solace at:
https://solace.com/contact-us/

2025-05-11T02:01:08.204+03:00  WARN 27024 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'workflowHookRegistry' defined in class path resource [com/solace/connector/core/config/WorkflowHookAutoConfiguration.class]: Failed to instantiate [com.solace.connector.core.service.WorkflowHookRegistry]: Factory method 'workflowHookRegistry' threw exception with message: null
2025-05-11T02:01:08.579+03:00 ERROR 27024 --- [           main] o.s.boot.SpringApplication               : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'workflowHookRegistry' defined in class path resource [com/solace/connector/core/config/WorkflowHookAutoConfiguration.class]: Failed to instantiate [com.solace.connector.core.service.WorkflowHookRegistry]: Factory method 'workflowHookRegistry' threw exception with message: null
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
        at com.solacecoe.connectors.cdc.CDCConnector.main(CDCConnector.java:31)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
        at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
        at org.springframework.boot.loader.launch.PropertiesLauncher.main(PropertiesLauncher.java:580)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.solace.connector.core.service.WorkflowHookRegistry]: Factory method 'workflowHookRegistry' threw exception with message: null
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178)
        at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
        ... 26 common frames omitted
Caused by: java.util.NoSuchElementException: null
        at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1599)
        at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1620)
        at com.solace.connector.core.service.WorkflowHookRegistry.<init>(WorkflowHookRegistry.java:56)
        at com.solace.connector.core.config.WorkflowHookAutoConfiguration.workflowHookRegistry(WorkflowHookAutoConfiguration.java:28)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:146)
        ... 27 common frames omitted

D:\SOLACE\CONNECTORS\pubsubplus-connector-debezium-3.0.0>

Application.yml:
# --------------------------
# SAMPLE CONFIGURATION
# --------------------------

spring:
  cloud:
    function:
      definition: debeziumSupplier

    # For more info about Spring Cloud Stream and the Solace PubSub+ binder:
    # - https://docs.spring.io/spring-cloud-stream/docs/current/reference/html/spring-cloud-stream.html
    # - https://github.com/SolaceProducts/solace-spring-cloud/tree/master/solace-spring-cloud-starters/solace-spring-cloud-stream-starter
    stream:
      bindings:  # Workflow bindings
        input-0:
          destination: Solace/Queue/0   # Queue name
          binder: solace
        output-0:
          destination: producer-destination  # CDC producer destination
          binder: cdcsupplier
        input-1:
          destination: consumer-destination  # CDC consumer destination
          binder: cdcsupplier
        output-1:
          destination: Solace/Topic/1   # Topic name
          binder: solace

#      binding-retry-interval: 30  # The interval (in seconds) between retrying binding creation. Set it to zero to treat such conditions as fatal, preventing the application from starting.

solace:
  connector:
    workflows:  # Workflow configuration
      1:
        enabled: true  # If true, the workflow is enabled.
      0:
        enabled: false  # If true, the workflow is enabled.

        transform-headers:  # Per-Processor headers transform configuration
          expressions:  # A mapping of header names to header value SpEL expressions. The SpEL context contains the `headers` parameter which can be used to read the input message’s headers.
            new-header: "'prefix-' + headers.id"  # Example
        transform-payloads:  # Per-Processor payloads transform configuration
          expressions:  # A list of a single transformation as a SpEL expression
            - transform: "#isPayloadBytes(payload) ? new String(payload).toUpperCase() : payload instanceof T(String) ? payload.toUpperCase() : payload"  # Example

#    management:
#      leader-election:
#        mode: standalone  # The connector’s leader election mode. (values: standalone, active_active, active_standby)
#        fail-over:
#          max-attempts: 3  # The maximum number of attempts to perform a fail-over.
#          back-off-initial-interval: 1000  # The initial interval (milliseconds) to back-off when retrying a fail-over.
#          back-off-max-interval: 10000  # The maximum interval (milliseconds) to back-off when retrying a fail-over.
#          back-off-multiplier: 2.0  # The multiplier to apply to the back-off interval between each retry of a fail-over.
#      queue: management-queue  # The management queue name.
#      session:  # The management session. This has the same interface as that used by `solace.java.*`. For more info: https://github.com/SolaceProducts/solace-spring-boot/tree/master/solace-spring-boot-starters/solace-java-spring-boot-starter#updating-your-application-properties
#        host: tcp://localhost:55555
#        client-username: default
#        client-password: default

#    security:
#      enabled: true  # If true, security is enabled. Otherwise, anyone has access to the connector’s endpoints.
#      csrf-enabled: true  # If true, CSRF protection is enabled. Makes sense only if solace.connector.security.enabled is true.
#      users:  # User configuration
#        - name: <user-name>  # The name of this user.
#          password: <user-password>  # The password for this user.
#          roles:  # The list of roles which this user has. Has read-only access if no roles are given. (values: admin)
#            - <role>

#        - name: user  # Example: Creates a read-only user
#          password: pass
#        - name: admin  # Example: Creates a user with admin role
#          password: admin
#          roles:
#            - admin


  java:  # Solace PubSub+ connection details. For more info: https://github.com/SolaceProducts/solace-spring-boot/tree/master/solace-spring-boot-starters/solace-java-spring-boot-starter#updating-your-application-properties
    connect-retries: -1
    reconnect-retries: -1
    host: tcp://localhost:55555
    msg-vpn: default
    client-username: default
    client-password: default

management:
  metrics:  # Metrics monitoring systems. For more info: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.metrics
    export:
#      defaults:
#        enabled: false
      simple:
        enabled: true
#      <system>:
#        enabled: false
#  endpoint:
#    health:
#      show-components: never
#      show-details: never
  endpoints:
    web:  # Actuator web endpoint configuration. For more info: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints. Initial set of metrics is defined as a bare minimum for Connector Manager compatibility. To shrink it simply remove unnecessary ones
      exposure:
        include: "health,metrics,loggers,logfile,channels,env,workflows,leaderelection,bindings"

logging:  # Logging configuration. For more info: https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.logging
  level:
    root: warn
    com.solace.connectors.debezium: TRACE # Enables TRACE logs for connector
    com.solace.connector.core: TRACE # Enables TRACE logs for connector framework
    com.solace.spring.cloud.stream.binder: TRACE # Enables TRACE logs for Solace binder
  file:
    name: myapp.log  # base log file name. Example: Generates a log file to a file named myapp.log.
  logback:
    rollingpolicy:  # Logback file rolling policy
      file-name-pattern: "${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz"  # Pattern for rolled-over log file names. Example: Rolls the log file into an archive once every day. `%i` is reset to `0` at the start of the day.
      max-file-size: 100MB  # The maximum size of log file before it is archived. Example: Within a given day, when the log file reaches 100 MB, archive it, and increment `%i`.
#      max-history: 7  # The maximum rotation-period's worth of archive log files to keep. Example: Since the `file-name-pattern` is configured to rollover once every day, keep 7 days worth of log archives.
#      total-size-cap: 1GB  # Total size of log backups for a given rotation period. Example: Keep up-to 1 GB of log archives for every day.

server:
  port: 8090