<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Spring - Tag - Simon Jakubowski</title><link>https://sijakubo.github.io/info/tags/spring/</link><description>Spring - Tag - Simon Jakubowski</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>sijakubo@gmail.com ( Simon Jakubowski)</managingEditor><webMaster>sijakubo@gmail.com ( Simon Jakubowski)</webMaster><lastBuildDate>Fri, 08 Mar 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://sijakubo.github.io/info/tags/spring/" rel="self" type="application/rss+xml"/><item><title>Enhance your Java Spring Applications with AI</title><link>https://sijakubo.github.io/info/posts/post-11/</link><pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate><author>sijakubo@gmail.com ( Simon Jakubowski)</author><guid>https://sijakubo.github.io/info/posts/post-11/</guid><description><![CDATA[<p>I came across the release notes for <a href="https://spring.io/blog/2024/02/23/spring-ai-0-8-0-released">Spring AI 0.8.0</a> and i thought i might give it a try and it&rsquo;s frighteningly simple to do so. Here is a short sample Project: <a href="https://github.com/sijakubo/spring-ai-test">https://github.com/sijakubo/spring-ai-test</a></p>
<p>You just have to:</p>
<ul>
<li>include the Spring AI dependencies</li>
<li>provide an AI token</li>
<li>call the Spring AI proxy (e.g. ChatClient, ImageClient)</li>
</ul>
<p>Supported models are:</p>
<blockquote>
<p><strong>Chat Models</strong></p>
<ul>
<li>OpenAI</li>
<li>Azure Open AI</li>
<li>Amazon Bedrock</li>
<li>Anthropic&rsquo;s Claude</li>
<li>Cohere&rsquo;s Command</li>
<li>AI21 Labs&rsquo; Jurassic-2</li>
<li>Meta&rsquo;s LLama 2</li>
<li>Amazon&rsquo;s Titan</li>
<li>Google Vertex AI Palm - Gemini support coming soon (follow the WIP branch)</li>
<li>HuggingFace - access thousands of models, including those from Meta such as Llama2</li>
<li>Ollama - run AI models on your local machine</li>
</ul>
<p><strong>Text-to-image Models</strong></p>]]></description></item><item><title>Integrate DynamoDB in Spring Boot and Gitlab-CI using aws sdk 2.x</title><link>https://sijakubo.github.io/info/posts/post-10/</link><pubDate>Wed, 31 Jan 2024 00:00:00 +0000</pubDate><author>sijakubo@gmail.com ( Simon Jakubowski)</author><guid>https://sijakubo.github.io/info/posts/post-10/</guid><description><![CDATA[<p>I had significant issues integrating DynamoDB into one of our projects. The main challenge was finding suitable documentation, as many sources describe integration with AWS SDK version 1.x.</p>
<p>In true Scout&rsquo;s honor, here&rsquo;s a brief description of how to integrate DynamoDB using AWS SDK 2.x into a Spring Boot project.</p>
<p>In the project, start the following Docker container to have a local DynamoDB for development purposes. Here&rsquo;s an excerpt from our <code>docker-compose.yml</code>:</p>]]></description></item><item><title>Testcontainers | Postgres: Postgis with Spring and Spock</title><link>https://sijakubo.github.io/info/posts/post-5/</link><pubDate>Tue, 18 Oct 2022 00:00:00 +0000</pubDate><author>sijakubo@gmail.com ( Simon Jakubowski)</author><guid>https://sijakubo.github.io/info/posts/post-5/</guid><description><![CDATA[<p>A great way to include all the required resources for integration tests, <a href="https://www.testcontainers.org/">Testcontainers</a> provides an easy way to start docker containers from within your testcode. This removes the necessity to create test <code>docker-compose.yml</code> files and write <code>README.md</code> code on how to even run a test.</p>
<p>Here is a short example using testcontainers with Spring and Spock on a Postgis / Postgres database.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-groovy" data-lang="groovy"><span class="line"><span class="cl"><span class="nd">@SpringBootTest</span>
</span></span><span class="line"><span class="cl"><span class="nd">@AutoConfigureMockMvc</span>
</span></span><span class="line"><span class="cl"><span class="nd">@AutoConfigureTestDatabase</span><span class="o">(</span><span class="n">replace</span> <span class="o">=</span> <span class="n">AutoConfigureTestDatabase</span><span class="o">.</span><span class="na">Replace</span><span class="o">.</span><span class="na">NONE</span><span class="o">)</span>
</span></span><span class="line"><span class="cl"><span class="nd">@ContextConfiguration</span><span class="o">(</span><span class="n">initializers</span> <span class="o">=</span> <span class="o">[</span><span class="n">Initializer</span><span class="o">.</span><span class="na">class</span><span class="o">])</span>
</span></span><span class="line"><span class="cl"><span class="kd">class</span> <span class="nc">FieldControllerTest</span> <span class="kd">extends</span> <span class="n">IntegrationTest</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Shared</span>
</span></span><span class="line"><span class="cl">  <span class="kd">public</span> <span class="kd">static</span> <span class="n">JdbcDatabaseContainer</span> <span class="n">postgreSQLContainer</span> <span class="o">=</span> <span class="k">new</span> <span class="n">PostgisContainerProvider</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">newInstance</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withDatabaseName</span><span class="o">(</span><span class="s2">&#34;integration-tests-db&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withUsername</span><span class="o">(</span><span class="s2">&#34;sa&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">.</span><span class="na">withPassword</span><span class="o">(</span><span class="s2">&#34;sa&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kd">static</span> <span class="kd">class</span> <span class="nc">Initializer</span> <span class="kd">implements</span> <span class="n">ApplicationContextInitializer</span><span class="o">&lt;</span><span class="n">ConfigurableApplicationContext</span><span class="o">&gt;</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">void</span> <span class="nf">initialize</span><span class="o">(</span><span class="n">ConfigurableApplicationContext</span> <span class="n">configurableApplicationContext</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">start</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">      <span class="n">TestPropertyValues</span><span class="o">.</span><span class="na">of</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.url=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getJdbcUrl</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.username=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getUsername</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;spring.datasource.password=&#34;</span> <span class="o">+</span> <span class="n">postgreSQLContainer</span><span class="o">.</span><span class="na">getPassword</span><span class="o">()</span>
</span></span><span class="line"><span class="cl">      <span class="o">).</span><span class="na">applyTo</span><span class="o">(</span><span class="n">configurableApplicationContext</span><span class="o">.</span><span class="na">getEnvironment</span><span class="o">());</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Autowired</span>
</span></span><span class="line"><span class="cl">  <span class="n">MockMvc</span> <span class="n">mockMvc</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="nd">@Autowired</span>
</span></span><span class="line"><span class="cl">  <span class="n">FieldRepository</span> <span class="n">fieldRepository</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="kt">void</span> <span class="nf">setup</span><span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">fieldRepository</span><span class="o">.</span><span class="na">save</span><span class="o">(</span><span class="k">new</span> <span class="n">Field</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">      <span class="n">UUID</span><span class="o">.</span><span class="na">fromString</span><span class="o">(</span><span class="s1">&#39;ad68f894-c16b-4953-b577-7cddb3e85ae5&#39;</span><span class="o">),</span> <span class="s2">&#34;initSampleField&#34;</span><span class="o">,</span>
</span></span><span class="line"><span class="cl">      <span class="k">new</span> <span class="nf">Polygon</span><span class="o">(</span>
</span></span><span class="line"><span class="cl">        <span class="n">PositionSequenceBuilders</span><span class="o">.</span><span class="na">variableSized</span><span class="o">(</span><span class="n">G2D</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.8208837124389</span><span class="o">,</span> <span class="mf">51.0596004663904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.83490292265498</span><span class="o">,</span> <span class="mf">51.0571257015788</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.87078646658134</span><span class="o">,</span> <span class="mf">51.0451607414904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.79146302423308</span><span class="o">,</span> <span class="mf">51.0612386272784</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="mf">5.8208837124389</span><span class="o">,</span> <span class="mf">51.0596004663904</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">          <span class="o">.</span><span class="na">toPositionSequence</span><span class="o">(),</span>
</span></span><span class="line"><span class="cl">        <span class="n">CoordinateReferenceSystems</span><span class="o">.</span><span class="na">WGS84</span>
</span></span><span class="line"><span class="cl">      <span class="o">)</span>
</span></span><span class="line"><span class="cl">    <span class="o">))</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  <span class="o">...</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span></code></pre></div><p>To integrate testcontainers into your project, you&rsquo;ll need the following dependencies:</p>]]></description></item></channel></rss>