That being said, may possibly not make sense to accomplish that. I can not query the fresh builders as to the reasons it was done so way, they’re not right here any more. So it project’s tale is only able to find out with regards to Git records.
I believe we have been having fun with Spring season Analysis Rest incorrect, incorrectly mixing WebMVC rules. Whenever we had not done so right away, one thing might have run far easier. We are now done with brand new Spring season Studies People migration. It is the right time to disperse on to the 2nd Spring season component, Springtime Kafka. Spring season Kafka, or in other words Springtime to possess Apache Kafka , is a superb treatment for fool around with Kafka on your own Spring programs. It includes effortless-to-play with layouts to have giving texts and regular Spring season annotations to possess ingesting messages.Spring Kafka
Configuring the brand new users
step one [ERROR] coffees.lang.IllegalStateException: Don't weight ApplicationContext 2 3 Considering: org.springframework.beans.facility.BeanCreationException: Mistake creating bean with term 'consumerFactory' discussed in classification highway financial support [ de / application / config / KafkaConsumerConfig . class ]: cuatro 5 Caused by: java . lang . NullPointerException six at java . ft / java . util . concurrent . ConcurrentHashMap . putVal ( ConcurrentHashMap . java: 1011 ) eight at java . base / java . util . concurrent . ConcurrentHashMap . init >( ConcurrentHashMap . java: 852 ) 8 at org . springframework . kafka . center . DefaultKafkaConsumerFactory . init >( DefaultKafkaConsumerFactory . java: 125 ) 9 at org . springframework . kafka . core . DefaultKafkaConsumerFactory . init >( DefaultKafkaConsumerFactory . java: 98 ) 10 at de . app . config . KafkaConsumerConfig . consumerFactory ( AbstractKafkaConsumerConfig . java: 120 )
It turns out, we had been configuring the consumerConfigs bean and setting null values in its properties. The following change from HashMap to ConcurrentHashMap means we can no longer configure null values. We refactored our code and now tests are green. Easy-peasy.
Kafka messages which have JsonFilter
1 [ERROR] org .apache .kafka mon .errors .SerializationException : Can also be 't serialize studies [Skills [payload=MyClass(Id=201000000041600097, . ] for thing [my-topic] 2 3 Due to: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Usually do not manage PropertyFilter which have id ‘myclassFilter' ; zero FilterProvider configured (as a consequence of source chain: de- .shot .Feel [ "payload" ] ) 4 during the com .fasterxml .jackson .databind .exc .InvalidDefinitionException .away from (InvalidDefinitionException .java : 77 )
Some of our Java Beans use ato manipulate the serialization and deserialization. This requires a propertyFilter to be configured on the ObjectMapper.
Spring for Apache Kafka made a change to the JsonSerializer , introducing an ObjectWriter . When the ObjectWriter instance is created, the ObjectMapper configuration is copied, not referenced. Our test case was re-configuring the ObjectMapper with the appropriate propertyFilter after the ObjectWriter instance was created. Hence, the ObjectWriter didn't know anything about the propertyFilter (since the configuration was already copied). After some refactoring, changing how we create and configure the JsonSerializer , our test cases were green.
Running our build $ mvn clean verify finally resulted in a green build. Everything is working as it should. We pushed our changes to Bitbucket and everything built like a charm.
Lessons discovered upgrading Spring Kafka
Instructions read during the Springtime Footwear revise
Spring and Spring Boot do a great job documenting their releases, their release notes are well maintained. That being said, upgrading was challenging, it took quite a while before everything was working again. A big part of that is on us, for not following best practices, guidelines, etc Conozca los hechos. A lot of this code was written when the team was just starting out with Spring and Spring Boot. Code evolves over time, without refactoring and applying those latest practices. Eventually that catches up with you, but we use this as a learning experience and improved things. Our test cases are now significantly better, and we'll keep a closer eye on them moving forward.