<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joao Kersul</title>
    <description>The latest articles on Forem by Joao Kersul (@kersul).</description>
    <link>https://forem.com/kersul</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F21602%2F705cbd2d-f2da-49d3-b044-9dbabeab8441.jpeg</url>
      <title>Forem: Joao Kersul</title>
      <link>https://forem.com/kersul</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kersul"/>
    <language>en</language>
    <item>
      <title>How I Plan Software Deliveries (Team-Solo Method)</title>
      <dc:creator>Joao Kersul</dc:creator>
      <pubDate>Thu, 19 Jun 2025 19:30:00 +0000</pubDate>
      <link>https://forem.com/kersul/how-to-plan-software-deliveries-team-solo-method-3n5b</link>
      <guid>https://forem.com/kersul/how-to-plan-software-deliveries-team-solo-method-3n5b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
The &lt;em&gt;Team-Solo Method&lt;/em&gt; breaks big, messy features into five clear steps, switching between working together (Team) and working alone (Solo).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Map the problem with the whole team.
&lt;/li&gt;
&lt;li&gt;On your own, list every open question.
&lt;/li&gt;
&lt;li&gt;Meet again to check the plan and hand out the tough bits.
&lt;/li&gt;
&lt;li&gt;Solve the unknowns and turn them into clear tasks.
&lt;/li&gt;
&lt;li&gt;Lock the timeline and success metrics.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Handle risks early so scope stays clear and deadlines stick.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Team-Solo Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Context
&lt;/h3&gt;

&lt;p&gt;Big features die in the gap between &lt;em&gt;idea&lt;/em&gt; and &lt;em&gt;execution&lt;/em&gt;. Without a clear roadmap, you either over-spec and stall or under-spec and blow up the timeline. The Team-Solo Method dodges both traps by alternating between focused group sessions (&lt;strong&gt;Team&lt;/strong&gt;) and heads-down deep work (&lt;strong&gt;Solo&lt;/strong&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Use It
&lt;/h3&gt;

&lt;p&gt;Reach for this method when the work &lt;strong&gt;changes architecture, data contracts, or organizational boundaries&lt;/strong&gt;. Bug fixes and small UI tweaks don’t need this much ceremony.&lt;/p&gt;




&lt;h2&gt;
  
  
  Team-Solo Steps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Define the Domain (Team)
&lt;/h3&gt;

&lt;p&gt;Kick off with the whole squad in the same (physical or virtual) room and make the domain crystal-clear.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agenda&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frame the problem (5 min).&lt;/strong&gt; Desired outcome, constraints, non-goals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map the domain (30 min).&lt;/strong&gt; Brainstorm events, commands, policies—Event Storming works great here.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope check (10 min).&lt;/strong&gt; Explicitly mark what’s &lt;em&gt;out&lt;/em&gt; for the first release.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Name things (10 min).&lt;/strong&gt; Agree on ubiquitous language and key aggregates.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Expected Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A high-level domain map everyone understands.
&lt;/li&gt;
&lt;li&gt;A shared glossary of entities and &lt;a href="https://martinfowler.com/bliki/DDD_Aggregate.html" rel="noopener noreferrer"&gt;aggregates&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;A starter list of &lt;em&gt;known unknowns&lt;/em&gt; to investigate later.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Organize Ideas and Challenges (Solo)
&lt;/h3&gt;

&lt;p&gt;Step away from the noise and turn the raw domain artifacts into actionable insights.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cluster related concepts.&lt;/strong&gt; Reveal implicit modules and bounded contexts.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surface unknowns.&lt;/strong&gt; Anything fuzzy becomes a &lt;em&gt;spike&lt;/em&gt; task.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spot quick wins.&lt;/strong&gt; Identify slices that deliver value early.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sketch architecture.&lt;/strong&gt; Lo-fi boxes and arrows—focus on seams and data flow.
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️  If something feels vague, write “VAGUE” on it—future you will thank present you.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Expected Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;em&gt;Challenge Backlog&lt;/em&gt; listing every spike with an owner &lt;strong&gt;placeholder&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;First-cut architecture diagram.&lt;/li&gt;
&lt;li&gt;Draft roadmap sliced by value. &lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. First Debrief with Tech Team (Team)
&lt;/h3&gt;

&lt;p&gt;Time to stress-test the draft with the people who will build it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agenda&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Walkthrough (15 min).&lt;/strong&gt; Present clusters, spikes, straw-man architecture, roadmap.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open critique (20 min).&lt;/strong&gt; Teammates poke holes, raise risks, suggest alternatives.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spike commitment (10 min).&lt;/strong&gt; Assign owners and deadlines to each unknown.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Definition of Done (5 min).&lt;/strong&gt; Agree what &lt;em&gt;version 1&lt;/em&gt; means.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Expected Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Challenge list with owners and due dates.
&lt;/li&gt;
&lt;li&gt;Provisional architectural direction.
&lt;/li&gt;
&lt;li&gt;Time-box for the next Solo phase (e.g., &lt;em&gt;3 working days&lt;/em&gt;).
&lt;/li&gt;
&lt;li&gt;Parking-lot questions to revisit later.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Solve Tech Challenges &amp;amp; Create Stories (Solo)
&lt;/h3&gt;

&lt;p&gt;Engineers disappear into their caves (or pair rooms) to &lt;strong&gt;kill the unknowns&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build throw-away proofs-of-concept to validate libraries, latency, migrations, etc.
&lt;/li&gt;
&lt;li&gt;Convert validated chunks into user stories or technical tasks with estimates.
&lt;/li&gt;
&lt;li&gt;Document decisions and rationale.
&lt;/li&gt;
&lt;li&gt;Escalate if a spike breaches its time-box—don’t boil the ocean.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Expected Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All spikes closed, questions answered.
&lt;/li&gt;
&lt;li&gt;Backlog of &lt;em&gt;ready-for-refinement&lt;/em&gt; stories with initial estimates.
&lt;/li&gt;
&lt;li&gt;Updated architecture diagram reflecting discoveries.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Final Refine Together (Team)
&lt;/h3&gt;

&lt;p&gt;The “Go / No-Go” checkpoint where ideas become a committed delivery plan.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Agenda&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Refine stories (20 min).&lt;/strong&gt; Apply INVEST, tighten acceptance criteria, right-size slices.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Group estimation (15 min).&lt;/strong&gt; Planning Poker or similar.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope cut / pad (10 min).&lt;/strong&gt; If the numbers don’t fit, negotiate &lt;em&gt;scope&lt;/em&gt;, not &lt;em&gt;quality&lt;/em&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lock release plan (10 min).&lt;/strong&gt; Map stories to sprints, set milestones, assign DRIs.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define success metrics (5 min).&lt;/strong&gt; Performance, adoption, whatever matters—write it down.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Expected Output&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refined backlog ordered by value.
&lt;/li&gt;
&lt;li&gt;Release timeline the whole team believes.
&lt;/li&gt;
&lt;li&gt;Clear success metrics and monitoring plan.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast feedback loops.&lt;/strong&gt; No phase lasts long enough for you to drift too far off course.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asymmetric collaboration.&lt;/strong&gt; Meet only when group intelligence is needed; protect deep-work time otherwise.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Risk becomes work.&lt;/strong&gt; Unknowns transform into dated spike tasks you can burn down.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trust through visibility.&lt;/strong&gt; Stakeholders see tangible artefacts at every checkpoint—boards, diagrams, backlog, metrics.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common Pitfalls (and How to Dodge Them)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pitfall&lt;/th&gt;
&lt;th&gt;Consequence&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Treating spikes as optional&lt;/td&gt;
&lt;td&gt;Surprises mid-sprint&lt;/td&gt;
&lt;td&gt;Time-box and track them like any other work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skipping the Final Refine&lt;/td&gt;
&lt;td&gt;“Half-baked” stories enter sprint&lt;/td&gt;
&lt;td&gt;Make it a release gate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Over-documenting early&lt;/td&gt;
&lt;td&gt;Analysis paralysis&lt;/td&gt;
&lt;td&gt;Capture &lt;em&gt;just enough&lt;/em&gt; to unblock the next phase&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Big features aren’t hard because the code is hard—they’re hard because the &lt;em&gt;unknowns&lt;/em&gt; are hidden. The Team-Solo Method shines a light on those uncertainties, turns them into actionable tasks, and keeps the team oscillating between collective alignment and focused execution. Steal it, adapt it, and watch your next architecture-level delivery land on time and on target.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cut through uncertainty, surface risks early, and keep moving—that’s the whole game.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>projectmanagement</category>
      <category>agile</category>
      <category>architecture</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Multiple MongoDB Databases on Spring Boot</title>
      <dc:creator>Joao Kersul</dc:creator>
      <pubDate>Fri, 12 Apr 2024 15:02:25 +0000</pubDate>
      <link>https://forem.com/kersul/multiple-mongodb-databases-on-spring-boot-2kp6</link>
      <guid>https://forem.com/kersul/multiple-mongodb-databases-on-spring-boot-2kp6</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;If you're working with Modular Monoliths on Spring Boot, you want to separate your modules into separate databases. &lt;/p&gt;

&lt;p&gt;That's exactly my case, and trying to do that was a really pain in the ass. Mainly because all solutions that I've found still didn't make auto index creation work.&lt;/p&gt;

&lt;p&gt;One important information: Here I'm using &lt;strong&gt;Kotlin&lt;/strong&gt; with &lt;strong&gt;Spring Boot 3.2&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Adding Properties
&lt;/h2&gt;

&lt;p&gt;First, you have to configure your &lt;code&gt;application.yml&lt;/code&gt; to set the database names. Mine I decided to configure this way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# application.yml&lt;/span&gt;
&lt;span class="na"&gt;spring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;mongodb&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mongodb://localhost:27017&lt;/span&gt;
      &lt;span class="na"&gt;first-db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;first-db&lt;/span&gt;
      &lt;span class="na"&gt;second-db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;second-db&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Creating Mongo Config for Each Module
&lt;/h2&gt;

&lt;p&gt;Since I'm using a modular monolith, I want to separate Mongo configurations for each module. So repositories in each module can use different databases.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// first/config/FirstMongoConfig.kt&lt;/span&gt;
&lt;span class="nd"&gt;@EnableMongoRepositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;basePackages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"com.example.first"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;mongoTemplateRef&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"firstMongoTemplate"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;FirstMongoConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nd"&gt;@Value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\${spring.data.mongodb.first.database}"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"firstMongoTemplate"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;firstMongoTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nd"&gt;@Qualifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"firstMongoDatabaseFactory"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoTemplate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MongoTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"firstMongoDatabaseFactory"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;firstMongoDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nd"&gt;@Qualifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"firstMongoClient"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;mongoClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoClient&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoDatabaseFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;SimpleMongoClientDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongoClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"firstMongoClient"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;firstMongoClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;mongoProperties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoProperties&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoClient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MongoClients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nc"&gt;MongoClientSettings&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;applyConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="nc"&gt;ConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongoProperties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do exactly the same for the second module:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// second/config/SecondMongoConfig.kt&lt;/span&gt;
&lt;span class="nd"&gt;@EnableMongoRepositories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;basePackages&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"com.example.second"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;mongoTemplateRef&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"secondMongoTemplate"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nd"&gt;@Configuration&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SecondMongoConfig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nd"&gt;@Value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\${spring.data.mongodb.second.database}"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"secondMongoTemplate"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;secondMongoTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nd"&gt;@Qualifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"secondMongoDatabaseFactory"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoTemplate&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MongoTemplate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;factory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"secondMongoDatabaseFactory"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;secondMongoDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nd"&gt;@Qualifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"secondMongoClient"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;mongoClient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoClient&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoDatabaseFactory&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;SimpleMongoClientDatabaseFactory&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongoClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dbName&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Bean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"secondMongoClient"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;secondMongoClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;mongoProperties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoProperties&lt;/span&gt;
    &lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nc"&gt;MongoClient&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MongoClients&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nc"&gt;MongoClientSettings&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;applyConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="nc"&gt;ConnectionString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongoProperties&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Enabling Auto Index Creation
&lt;/h2&gt;

&lt;p&gt;This way that we've done, still don't auto create indexes. I was trying to do this multiple ways and checking &lt;a href="https://docs.spring.io/spring-data/mongodb/reference/mongodb/mapping/mapping-index-management.html"&gt;Spring Data MongoDB documentation&lt;/a&gt; I decided to use &lt;code&gt;IndexOperations&lt;/code&gt; to solve this problem.&lt;/p&gt;

&lt;p&gt;I simply wrote a component that gets all &lt;code&gt;MongoTemplates&lt;/code&gt; and creates indexes for each one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config/BuildMongoIndexes.kt&lt;/span&gt;
&lt;span class="nd"&gt;@Component&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BuildMongoIndexes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;mongoTemplates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;List&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;MongoTemplate&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@EventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;ContextRefreshedEvent&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;initIndicesAfterStartup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;mongoTemplates&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nf"&gt;initIndices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;initIndices&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongoTemplate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoTemplate&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;mappingContext&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mongoTemplate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;converter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mappingContext&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;resolver&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MongoPersistentEntityIndexResolver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mappingContext&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;mappingContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;persistentEntities&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isAnnotationPresent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;indexOps&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mongoTemplate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;indexOps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="n"&gt;resolver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resolveIndexFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;indexOps&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;ensureIndex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. How to Test
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Creating Testcontainers Config
&lt;/h3&gt;

&lt;p&gt;To be able to test for multiple databases, I recommend you using &lt;a href="https://testcontainers.com/"&gt;Testcontainers&lt;/a&gt;. That's my configuration to start the container:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// test/config/MongoTestConfiguration.kt&lt;/span&gt;
&lt;span class="nd"&gt;@TestConfiguration&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MongoTestConfiguration&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;companion&lt;/span&gt; &lt;span class="k"&gt;object&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;container&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;MongoDBContainer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;startContainer&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

        &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;startContainer&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;MongoDBContainer&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;container&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MongoDBContainer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;DockerImageName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"mongo:6"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
            &lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;container&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nd"&gt;@Primary&lt;/span&gt;
    &lt;span class="nd"&gt;@Bean&lt;/span&gt;
    &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;mongoProperties&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nc"&gt;MongoProperties&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;val&lt;/span&gt; &lt;span class="py"&gt;connectionString&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"mongodb://${container.host}:${container.firstMappedPort}"&lt;/span&gt;

        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;MongoProperties&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;apply&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;connectionString&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will set the &lt;code&gt;MongoProperties&lt;/code&gt; &lt;code&gt;uri&lt;/code&gt;. That will enable the &lt;code&gt;MongoConfig&lt;/code&gt; files to get this URL and connect to MongoDB on tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using on Tests
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="c1"&gt;// test/ExampleTest.kt&lt;/span&gt;
&lt;span class="nd"&gt;@SpringBootTest&lt;/span&gt;
&lt;span class="nd"&gt;@Import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;MongoTestConfiguration&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ExampleTest&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@Autowired&lt;/span&gt;
  &lt;span class="k"&gt;lateinit&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="py"&gt;exampleRepository&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;ExampleRepository&lt;/span&gt;

  &lt;span class="nd"&gt;@Test&lt;/span&gt;
  &lt;span class="k"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;`example&lt;/span&gt; &lt;span class="nf"&gt;test`&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Here you can normally use your repository&lt;/span&gt;
    &lt;span class="n"&gt;exampleRepository&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Example&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;That's all! Now you have multiple databases configurations with automatically index creation and as extra can use these configurations on your tests! \o/&lt;/p&gt;

</description>
      <category>spring</category>
      <category>kotlin</category>
      <category>mongodb</category>
      <category>multiple</category>
    </item>
  </channel>
</rss>
