<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sergei Chernov on JAVAPRO International</title><link>https://javapro-en.svenruppert.com/authors/sergei-chernov/</link><description>Recent content in Sergei Chernov on JAVAPRO International</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Wed, 17 Dec 2025 07:00:02 +0000</lastBuildDate><atom:link href="https://javapro-en.svenruppert.com/authors/sergei-chernov/index.xml" rel="self" type="application/rss+xml"/><item><title>Optimizing Spring Integration Tests at Scale</title><link>https://javapro-en.svenruppert.com/optimizing-spring-integration-tests-at-scale/</link><pubDate>Wed, 17 Dec 2025 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/optimizing-spring-integration-tests-at-scale/</guid><description>&lt;h2 id="1-introduction"&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;Sprint Boot is a popular Java framework that provides a rich platform for integration testing. It&amp;rsquo;s pretty convenient and flexible; however, at a large scale, when the project has hundreds or even thousands of integration tests using lots of heavy components (like TestContainers-managed beans), there can be performance and other issues. &lt;strong&gt;There are many hidden details that make much sense when the codebase becomes bigger and the configuration becomes more complicated.&lt;/strong&gt; In this article, we&amp;rsquo;ll look at how the framework works under the hood, why it can be slow and inefficient, and how to boost the performance.&lt;/p&gt;</description></item><item><title>Fluent setter: breaking the convention</title><link>https://javapro-en.svenruppert.com/fluent-setter-breaking-the-convention/</link><pubDate>Wed, 01 Oct 2025 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/fluent-setter-breaking-the-convention/</guid><description>&lt;p&gt;What if we implement a &lt;a href="https://en.wikipedia.org/wiki/Fluent_interface"&gt;fluent Interface&lt;/a&gt;, whereby the setter method returns &lt;strong&gt;this&lt;/strong&gt; instead of &lt;strong&gt;void&lt;/strong&gt;?&lt;/p&gt;
&lt;div class="code-block" data-lang=""&gt;
 &lt;div class="code-block-head"&gt;
 &lt;span class="code-block-lang"&gt;CODE&lt;/span&gt;
 &lt;button type="button" class="code-block-copy" aria-label="Copy code" data-code-copy&gt;
 &lt;span class="code-block-copy-icon" aria-hidden="true"&gt;⧉&lt;/span&gt;
 &lt;span class="code-block-copy-label"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre&gt;&lt;code&gt;public class SimplePojo {
 private String value;

 public String getValue() {
 return value;
 }

 public SimplePojo setValue(String value) {
 this.value = value;
 return this;
 }

 // equals, hashCode, toString
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Now, let’s rewrite a standard piece of code using a fluent interface:&lt;/p&gt;
&lt;div class="code-block" data-lang=""&gt;
 &lt;div class="code-block-head"&gt;
 &lt;span class="code-block-lang"&gt;CODE&lt;/span&gt;
 &lt;button type="button" class="code-block-copy" aria-label="Copy code" data-code-copy&gt;
 &lt;span class="code-block-copy-icon" aria-hidden="true"&gt;⧉&lt;/span&gt;
 &lt;span class="code-block-copy-label"&gt;Copy&lt;/span&gt;
 &lt;/button&gt;
 &lt;/div&gt;
 &lt;pre&gt;&lt;code&gt;private static AssignmentGroupedActivitiesResource create() {
 return new AssignmentGroupedActivitiesResource()
 .setGrouping(new UserActivitiesGroupingResource()
 .setAlignmentScore(1)
 .setFocusScore(0)
 .setAdvancedGroups(List.of(
 new ProductivityGroupResource()
 .setSectionName(&amp;#34;Development&amp;#34;)
 .setColor(&amp;#34;#2196f3&amp;#34;)
 .setSpentTime(5L),
 new ProductivityGroupResource()
 .setSectionName(&amp;#34;Chat&amp;#34;)
 .setColor(&amp;#34;#E502FA&amp;#34;)
 .setSpentTime(1L)
 ))
 .setPeriodLong(10L)
 .setTotalTrackedTime(7L)
 .setIntensityScore(2));
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Here’s the same code, without a fluent interface:&lt;/p&gt;</description></item><item><title>How to Speed up Maven Builds</title><link>https://javapro-en.svenruppert.com/how-to-speed-up-maven-builds/</link><pubDate>Tue, 26 Aug 2025 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/how-to-speed-up-maven-builds/</guid><description>&lt;p&gt;As a Maven project grows in size, the question of build speed and test execution time becomes more important. One of the most obvious ways to optimize is to switch to another build system (e.g., Gradle). However, before making the switch (which will inevitably bring new challenges—we’ll discuss this at the end), let’s first explore what we can do to speed things up while staying on Maven. Many of these tips will be useful regardless, even if you eventually decide to migrate.&lt;/p&gt;</description></item></channel></rss>