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