<?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>DEV Community: Sandro Giacomozzi</title>
    <description>The latest articles on DEV Community by Sandro Giacomozzi (@sandrogiacom).</description>
    <link>https://dev.to/sandrogiacom</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%2F133132%2F51162eb6-6cf4-450d-92a3-a2cb3dae568f.jpeg</url>
      <title>DEV Community: Sandro Giacomozzi</title>
      <link>https://dev.to/sandrogiacom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sandrogiacom"/>
    <language>en</language>
    <item>
      <title>How to install Java 13 from AdoptOpenJDK</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Fri, 27 Sep 2019 16:05:03 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/how-to-install-java-13-from-adoptopenjdk-1fa2</link>
      <guid>https://dev.to/sandrogiacom/how-to-install-java-13-from-adoptopenjdk-1fa2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this tutorial, you will learn how to install Java 13 from AdoptOpenJDK project.&lt;/p&gt;

&lt;h2&gt;
  
  
  AdoptOpenJDK
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://adoptopenjdk.net/" rel="noopener noreferrer"&gt;AdoptOpenJDK&lt;/a&gt; provides rock-solid OpenJDK binaries for the Java ecosystem and also provides infrastructure as code, and a Build farm for builders of OpenJDK, on any platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Install
&lt;/h2&gt;

&lt;p&gt;To install, just copy and paste the script above in your linux terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget https://github.com/AdoptOpenJDK/openjdk13-binaries/releases/download/jdk-13%2B33/OpenJDK13U-jdk_x64_linux_hotspot_13_33.tar.gz
&lt;span class="nb"&gt;sudo tar &lt;/span&gt;xvf OpenJDK13U-jdk_x64_linux_hotspot_13_33.tar.gz &lt;span class="nt"&gt;--directory&lt;/span&gt; /usr/lib/jvm/
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-alternatives &lt;span class="nt"&gt;--install&lt;/span&gt; /usr/bin/java java /usr/lib/jvm/jdk-13+33/bin/java 2
&lt;span class="nb"&gt;sudo &lt;/span&gt;update-alternatives &lt;span class="nt"&gt;--install&lt;/span&gt; /usr/bin/javac javac /usr/lib/jvm/jdk-13+33/bin/javac 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Jenv
&lt;/h2&gt;

&lt;p&gt;To use Java 13 without compromising your current installation, simply use &lt;a href="https://www.jenv.be/" rel="noopener noreferrer"&gt;Jenv&lt;/a&gt;. Take a look at this post if you don't know the project yet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sandrogiacom/multiple-jdks-no-problem-1knc"&gt;https://dev.to/sandrogiacom/multiple-jdks-no-problem-1knc&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Add Java 13
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jenv add /usr/lib/jvm/jdk-13+33
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check if work's&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jenv versions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My default (global) Java version is 11.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnlzeouaokcgktalc77t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpnlzeouaokcgktalc77t.png" width="415" height="194"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Test&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Create a new directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;java-13
&lt;span class="nb"&gt;cd &lt;/span&gt;java-13
java &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As expected, the console displayed the global version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;λ java &lt;span class="nt"&gt;-version&lt;/span&gt;
openjdk version &lt;span class="s2"&gt;"11.0.4"&lt;/span&gt; 2019-07-16
OpenJDK Runtime Environment AdoptOpenJDK &lt;span class="o"&gt;(&lt;/span&gt;build 11.0.4+11&lt;span class="o"&gt;)&lt;/span&gt;
OpenJDK 64-Bit Server VM AdoptOpenJDK &lt;span class="o"&gt;(&lt;/span&gt;build 11.0.4+11, mixed mode&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To set Java 13 as local, just type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jenv &lt;span class="nb"&gt;local &lt;/span&gt;13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And type &lt;code&gt;java -version&lt;/code&gt; again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;λ java &lt;span class="nt"&gt;-version&lt;/span&gt;
openjdk version &lt;span class="s2"&gt;"13"&lt;/span&gt; 2019-09-17
OpenJDK Runtime Environment AdoptOpenJDK &lt;span class="o"&gt;(&lt;/span&gt;build 13+33&lt;span class="o"&gt;)&lt;/span&gt;
OpenJDK 64-Bit Server VM AdoptOpenJDK &lt;span class="o"&gt;(&lt;/span&gt;build 13+33, mixed mode, sharing&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The complete source code it's on github:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sandrogiacom/dev-scripts" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/dev-scripts&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this short tutorial, we learned how to install Java 13 from AdoptOpenJDK project.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java13</category>
      <category>linux</category>
      <category>openjdk</category>
      <category>jenv</category>
    </item>
    <item>
      <title>How to create and fill out your own PDF form with Java</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Sat, 03 Aug 2019 22:23:57 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/how-to-create-and-fill-out-your-own-pdf-form-with-java-87b</link>
      <guid>https://dev.to/sandrogiacom/how-to-create-and-fill-out-your-own-pdf-form-with-java-87b</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this tutorial, you will learn how to populate a PDF document with Java using the &lt;a href="http://www.pdfbox.org/" rel="noopener noreferrer"&gt;PDFBox&lt;/a&gt; library. In addition you will see how to create your own forms or add editable fields to an existing PDF document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a simple form
&lt;/h2&gt;

&lt;p&gt;To create a form, let's use &lt;a href="https://www.libreoffice.org/" rel="noopener noreferrer"&gt;LibreOffice Draw&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Display the form toolbar. View Menu &amp;gt; Toolbars &amp;gt; Form Controls.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqsngzep5xru7wd01h5f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgqsngzep5xru7wd01h5f.png" width="139" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a blank document, enter two text fields:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1d67ylzn4erdffgrhtvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1d67ylzn4erdffgrhtvh.png" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Display the properties of the text field:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jukjva3eesi1titzpks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jukjva3eesi1titzpks.png" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Rename the fields to 'txt_1' and 'txt_2' respectively. Also leave the 'Read-only' property as 'Yes'.&lt;/p&gt;

&lt;p&gt;Export the document as PDF. Mine is like '/tmp/pdf-java.pdf'&lt;/p&gt;

&lt;p&gt;My template looked like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsiwnga0wj5r5i08lcf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhsiwnga0wj5r5i08lcf6.png" width="783" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Populating the PDF through Java
&lt;/h2&gt;

&lt;p&gt;Create a new maven Java project and add the dependency below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.apache.pdfbox&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;pdfbox&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;2.0.16&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a Java class with the code below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;PDDocument&lt;/span&gt; &lt;span class="n"&gt;pDDocument&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PDDocument&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;load&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;File&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/pdf-java.pdf"&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
            &lt;span class="nc"&gt;PDAcroForm&lt;/span&gt; &lt;span class="n"&gt;pDAcroForm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pDDocument&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getDocumentCatalog&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;getAcroForm&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
            &lt;span class="nc"&gt;PDField&lt;/span&gt; &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pDAcroForm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getField&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"txt_1"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setValue&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is a first field printed by Java"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;field&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pDAcroForm&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getField&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"txt_2"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;field&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;setValue&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"This is a second field printed by Java"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;pDDocument&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;save&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/tmp/pdf-java-output.pdf"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;pDDocument&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;close&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;printStackTrace&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the program and see the result:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlthqd7sor31gl4v1rcl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlthqd7sor31gl4v1rcl.png" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Remember, the ending file was saved to: "/tmp/pdf-java-output.pdf".&lt;/p&gt;

&lt;p&gt;The complete source code it's on github:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sandrogiacom/pdf-java" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/pdf-java&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this short tutorial, we learned how to populate a PDF from a PDF template created with LibreOffice Draw. Use your creativity to create beautiful templates, do automation, create batch files and more.&lt;/p&gt;

&lt;p&gt;Leave in the comments what your use case would be.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>pdf</category>
      <category>form</category>
      <category>pdfbox</category>
    </item>
    <item>
      <title>Kubernetes for Java Developers - Debug Application</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Thu, 11 Jul 2019 18:03:56 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/kubernetes-for-java-developers-debug-application-4l1a</link>
      <guid>https://dev.to/sandrogiacom/kubernetes-for-java-developers-debug-application-4l1a</guid>
      <description>&lt;h2&gt;
  
  
  Debug application
&lt;/h2&gt;

&lt;p&gt;At this point, we deployed our application within a local cluster. But now we have a problem. How do I debug my application that is inside the docker that is inside the kubernetes that is inside a virtual machine?&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare to debug
&lt;/h2&gt;

&lt;p&gt;In this case, we will use a remote Java debug.&lt;/p&gt;

&lt;h3&gt;
  
  
  First step:
&lt;/h3&gt;

&lt;p&gt;Prepare your Dockerfile:&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="s"&gt;FROM openjdk:11.0.3-jdk-slim&lt;/span&gt;
&lt;span class="s"&gt;RUN mkdir /usr/myapp&lt;/span&gt;
&lt;span class="s"&gt;COPY target/java-kubernetes.jar /usr/myapp/app.jar&lt;/span&gt;
&lt;span class="s"&gt;WORKDIR /usr/myapp&lt;/span&gt;
&lt;span class="s"&gt;EXPOSE &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;
&lt;span class="s"&gt;ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar app.jar" ]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ENTRYPOINT allows you to pass options to the java through $JAVA_OPTS environment variable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Second step:
&lt;/h3&gt;

&lt;p&gt;Changing &lt;code&gt;app-configmap.yaml&lt;/code&gt; file to fill &lt;code&gt;$JAVA_OPTS&lt;/code&gt;.&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="na"&gt;JAVA_OPTS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-Xms256m&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-Xmx512m&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-XX:MaxMetaspaceSize=128m"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Third step:
&lt;/h3&gt;

&lt;p&gt;Building and deploy app:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn clean &lt;span class="nb"&gt;install
eval&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;minikube &lt;span class="nt"&gt;-p&lt;/span&gt; dev.to docker-env&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; docker build &lt;span class="nt"&gt;--force-rm&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; java-k8s &lt;span class="nb"&gt;.&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; kubernetes/app/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fourth step:
&lt;/h3&gt;

&lt;p&gt;Exposing debug port to localhost:&lt;/p&gt;

&lt;p&gt;Get pods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; dev-to

NAME                     READY   STATUS    RESTARTS   AGE
myapp-7796bc89bf-h2f82   1/1     Running   0          3h3m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expose pod 5005 port:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl port-forward &lt;span class="nt"&gt;-n&lt;/span&gt; dev-to myapp-7796bc89bf-h2f82 5005:5005
Forwarding from 127.0.0.1:5005 -&amp;gt; 5005
Forwarding from &lt;span class="o"&gt;[&lt;/span&gt;::1]:5005 -&amp;gt; 5005
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Change your pod name as necessary&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Create a remote debug on your IDE:&lt;/p&gt;

&lt;p&gt;On IntelliJ, go to &lt;strong&gt;Run/Debug Configurations&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add new remote configuration like this:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndsikymawkvm422j4rul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndsikymawkvm422j4rul.png" width="799" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, run the configuration. You should see the message below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;Connected to the target VM, address: &lt;span class="s1"&gt;'localhost:5005'&lt;/span&gt;, transport: &lt;span class="s1"&gt;'socket'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check if works:
&lt;/h3&gt;

&lt;p&gt;Now, you can set a breakpoint in the &lt;code&gt;HelloController&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ntlrh1ijqab7wvzo16u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ntlrh1ijqab7wvzo16u.png" width="532" height="260"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;minikube &lt;span class="nt"&gt;-p&lt;/span&gt; dev.to service &lt;span class="nt"&gt;-n&lt;/span&gt; dev-to myapp &lt;span class="nt"&gt;--url&lt;/span&gt;
http://192.168.99.100:32301
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://192.168.99.100:32301/hello
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkyi8rupdh037l7trmlg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpkyi8rupdh037l7trmlg.png" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;In this part, we learned about how to debug application inside a local kubernetes cluster.&lt;/p&gt;

&lt;p&gt;In the next part, we will see some good practices and how to access application with friendly URL using Ingress.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>Kubernetes for Java Developers - Deploy Application</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Sun, 07 Jul 2019 13:33:41 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/kubernetes-for-java-developers-deploy-application-413k</link>
      <guid>https://dev.to/sandrogiacom/kubernetes-for-java-developers-deploy-application-413k</guid>
      <description>&lt;h2&gt;
  
  
  Hello Java Dev
&lt;/h2&gt;

&lt;p&gt;This is the third part of the series Kubernetes for Java Developers. Before continue, check the &lt;a href="https://dev.to/sandrogiacom/kubernetes-for-java-developers-setup-41nk"&gt;first&lt;/a&gt; and &lt;a href="https://dev.to/sandrogiacom/kubernetes-for-java-developers-creating-a-docker-image-1g36"&gt;second&lt;/a&gt; part.&lt;/p&gt;

&lt;p&gt;In this tutorial, we learn about to building and run application inside a kubernetes cluster.&lt;/p&gt;

&lt;p&gt;At this point, we have a &lt;strong&gt;Java application&lt;/strong&gt; running in &lt;strong&gt;docker&lt;/strong&gt; that uses a &lt;strong&gt;mysql&lt;/strong&gt; database running on docker too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare the environment for the big moment
&lt;/h2&gt;

&lt;p&gt;Check if you have the necessary tools before continue.&lt;/p&gt;

&lt;p&gt;Just check:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;minikube version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;vboxmanage --version&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you don't have one of the tools above, please go to part one, follow the instructions and return here.&lt;/p&gt;

&lt;p&gt;Or just type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make check&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The command above needs to be executed in the root of the project. Please clone it if you don't have it yet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sandrogiacom/java-kubernetes" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/java-kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare demo application
&lt;/h2&gt;

&lt;p&gt;Go to java-kubernetes directory and type &lt;code&gt;make&lt;/code&gt; to see all &lt;code&gt;make&lt;/code&gt; options.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create minikube machine
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;make k-setup&lt;/code&gt; starts &lt;strong&gt;minikube&lt;/strong&gt;, enable &lt;strong&gt;ingress&lt;/strong&gt; and create &lt;strong&gt;namespace&lt;/strong&gt; "dev-to".&lt;/p&gt;

&lt;h2&gt;
  
  
  Create kubernetes resources
&lt;/h2&gt;

&lt;p&gt;Check kubernetes folder with subdirectories &lt;strong&gt;app&lt;/strong&gt; and &lt;strong&gt;mysql&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7s4vfuf7tq52mwsg9cp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7s4vfuf7tq52mwsg9cp.png" width="549" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app-configmap.yaml&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application configurations with environment variables.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ConfigMap&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev-to&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;DATABASE_SERVER_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mysql"&lt;/span&gt;
  &lt;span class="na"&gt;DATABASE_USER_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;myapp"&lt;/span&gt;
  &lt;span class="na"&gt;DATABASE_USER_PASSWORD&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;myapp_pwd"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;app-deployment.yaml&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment creates one replicated pod. For more information please check &lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev-to&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
      &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
            &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;java-k8s:latest&lt;/span&gt;
            &lt;span class="na"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Never&lt;/span&gt;
            &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;http&lt;/span&gt;
            &lt;span class="na"&gt;envFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;configMapRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
                  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part here is the &lt;strong&gt;template&lt;/strong&gt; that defines the name of docker image, http port and source of environment variables.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;app-service.yaml&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An abstract way to expose an application running on a set of Pods as a network service.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev-to&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;NodePort&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;TCP&lt;/span&gt;
      &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
      &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8080&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;mysql&lt;/strong&gt; folder, we have only deployment and service files, because environment variables are in the same file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deploy database
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;make k-deploy-db&lt;/code&gt; create mysql &lt;strong&gt;deployment&lt;/strong&gt; and &lt;strong&gt;service&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Check if the service is running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl get pods -n dev-to&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Access database in localhost:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl port-forward -n dev-to &amp;lt;pod_name&amp;gt; 3306:3306&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Build application and docker image
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;make k-build-app&lt;/code&gt; &lt;strong&gt;build app and create docker image inside minikube machine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make k-deploy-app&lt;/code&gt; &lt;strong&gt;deploy app on cluster&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Check if services is running:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl get pods -n dev-to&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Check app url
&lt;/h2&gt;

&lt;p&gt;Minikube gives you the host and port to which you will access.&lt;/p&gt;

&lt;p&gt;Type:&lt;br&gt;
&lt;code&gt;minikube -p dev.to service -n dev-to myapp --url&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Address below will be different for you!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://192.168.99.133:30343&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -X GET http://192.168.99.133:30343/persons&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To open app directly in web browser:&lt;br&gt;
&lt;code&gt;minikube -p dev.to service -n dev-to myapp&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;In this part, we learned about how to build and deploy application inside a local kubernetes cluster.&lt;/p&gt;

&lt;p&gt;In the next part, we will see how to debug our application and some good practices for microservices.&lt;/p&gt;

&lt;p&gt;See you soon!&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Create all in one step
&lt;/h3&gt;

&lt;p&gt;To create world, just copy and paste command below on terminal. Make sure that you are in the root of the project.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;make k-all&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>Kubernetes for Java Developers - Creating a docker image</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Sun, 30 Jun 2019 20:16:53 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/kubernetes-for-java-developers-creating-a-docker-image-1g36</link>
      <guid>https://dev.to/sandrogiacom/kubernetes-for-java-developers-creating-a-docker-image-1g36</guid>
      <description>&lt;h2&gt;
  
  
  Welcome back
&lt;/h2&gt;

&lt;p&gt;On &lt;a href="https://dev.to/sandrogiacom/kubernetes-for-java-developers-setup-41nk"&gt;first&lt;/a&gt; tutorial of this series, we learn about set up a local kubernetes environment.&lt;br&gt;
At this point, we have a Java application that uses a mysql database running on docker.&lt;br&gt;
To package our application inside a docker image, we need to create a Dockerfile.&lt;/p&gt;
&lt;h2&gt;
  
  
  Create a Dockerfile
&lt;/h2&gt;

&lt;p&gt;Dockerfile definition:&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="s"&gt;FROM openjdk:11.0.3-jdk-slim&lt;/span&gt;
&lt;span class="s"&gt;RUN mkdir /usr/myapp&lt;/span&gt;
&lt;span class="s"&gt;COPY target/java-kubernetes-0.0.1-SNAPSHOT.jar /usr/myapp/app.jar&lt;/span&gt;
&lt;span class="s"&gt;WORKDIR /usr/myapp&lt;/span&gt;
&lt;span class="s"&gt;EXPOSE &lt;/span&gt;&lt;span class="m"&gt;8080&lt;/span&gt;
&lt;span class="s"&gt;CMD ["java", "-Xms128m", "-Xmx256m", "-jar", "app.jar"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffw6sb0r8nkb1tcpp18cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffw6sb0r8nkb1tcpp18cl.png" width="770" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Make to automate tasks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.gnu.org/software/make/" rel="noopener noreferrer"&gt;Make&lt;/a&gt; is a tool which controls the generation of executables and other non-source files of a program from the program's source files.&lt;br&gt;
We will use make to automate maven and docker commands in this project.&lt;br&gt;
Check your make installation. Type &lt;code&gt;make --version&lt;/code&gt; on terminal. If none happens, please install make before continue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3cm6rignecvsazx1c4w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm3cm6rignecvsazx1c4w.png" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Create a Makefile
&lt;/h2&gt;

&lt;p&gt;Creating a Makefile on the same Dockerfile directory.&lt;br&gt;
Check out the complete Makefile on github: &lt;a href="https://github.com/sandrogiacom/java-kubernetes/blob/master/Makefile" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/java-kubernetes/blob/master/Makefile&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The importance parts are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;build:
    mvn clean &lt;span class="nb"&gt;install&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    docker build &lt;span class="nt"&gt;--force-rm&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; java-k8s &lt;span class="nb"&gt;.&lt;/span&gt;

run-db:
    make stop-db&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    make rm-db&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    docker run &lt;span class="nt"&gt;--name&lt;/span&gt; mysql57 &lt;span class="nt"&gt;-p&lt;/span&gt; 3306:3306 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;123456 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;java &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1234 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;k8s_java &lt;span class="nt"&gt;-d&lt;/span&gt; mysql/mysql-server:5.7

run-app:
    make stop-app&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    make rm-app&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    docker run &lt;span class="nt"&gt;--name&lt;/span&gt; myapp &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;DATABASE_SERVER_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql57 &lt;span class="nt"&gt;--link&lt;/span&gt; mysql57:mysql57 java-k8s:latest      
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;build:&lt;/strong&gt; Run maven and create a docker image with the name "java-k8s"&lt;br&gt;
&lt;strong&gt;run-db:&lt;/strong&gt; Start a new mysql database container&lt;br&gt;
&lt;strong&gt;run-app:&lt;/strong&gt; Start a new application container&lt;/p&gt;

&lt;p&gt;In this order, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make build
make run-db
make run-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Obs:&lt;/strong&gt; Wait 30 seconds between &lt;code&gt;run:db&lt;/code&gt; and &lt;code&gt;run:app&lt;/code&gt; to make time to start up database.&lt;/p&gt;

&lt;p&gt;To see logs of applicaton, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;CTRL+C&lt;/code&gt; to exit log mode.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;docker ps&lt;/code&gt; to see the containers running&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://localhost:8080/persons" rel="noopener noreferrer"&gt;http://localhost:8080/persons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuijaikukgei1bbujcf6r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuijaikukgei1bbujcf6r.png" width="474" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To stop applicaton and database, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;make stop-app
make stop-db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please clone the complete demo app at:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sandrogiacom/java-kubernetes" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/java-kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Have fun!&lt;/p&gt;

&lt;p&gt;See you on the next part. Deploy your app into kubernetes cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>Kubernetes for Java Developers - Setup</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Thu, 27 Jun 2019 20:40:14 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/kubernetes-for-java-developers-setup-41nk</link>
      <guid>https://dev.to/sandrogiacom/kubernetes-for-java-developers-setup-41nk</guid>
      <description>&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;The ​​technology area is cyclical, from time to time the same technologies come back, with different names.&lt;/em&gt;&lt;/strong&gt; (Heidemann, Vanei)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you are over 35, you have seen many technologies being reinvented. In this case, we'll talk about application servers. As we can see in this article of &lt;a href="https://twitter.com/rafabene" rel="noopener noreferrer"&gt;@rafabene&lt;/a&gt;. &lt;a href="https://developers.redhat.com/blog/2018/06/28/why-kubernetes-is-the-new-application-server/" rel="noopener noreferrer"&gt;Why Kubernetes is The New Application Server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As developers, we want to run the code on our machine, to have the control in our hands.&lt;br&gt;
But now, applications are not only running on Docker containers. There are a number of things we need to worry about.&lt;/p&gt;

&lt;p&gt;In this tutorial you will learn how to prepare the local environment for a kubernetes cluster. This is the first post of a series about Java and Kubernetes.&lt;/p&gt;
&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; is an open source software platform to create, deploy and manage virtualized application containers on a common operating system (OS), with an ecosystem of allied tools.&lt;/p&gt;
&lt;h3&gt;
  
  
  Minikube
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/kubernetes/minikube" rel="noopener noreferrer"&gt;Minikube&lt;/a&gt; implements a local Kubernetes cluster on macOS, Linux, and Windows.&lt;/p&gt;
&lt;h3&gt;
  
  
  Kubectl
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://kubernetes.io/docs/tasks/tools/install-kubectl/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; command-line tool, kubectl, allows you to run commands against Kubernetes clusters. &lt;/p&gt;
&lt;h3&gt;
  
  
  VirtualBox (Optional)
&lt;/h3&gt;

&lt;p&gt;The Kubernetes cluster running inside a Virtual Machine&lt;br&gt;
&lt;a href="https://www.virtualbox.org/" rel="noopener noreferrer"&gt;https://www.virtualbox.org/&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  If you don't have any of these tools, this can help you:
&lt;/h3&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sandrogiacom" rel="noopener noreferrer"&gt;
        sandrogiacom
      &lt;/a&gt; / &lt;a href="https://github.com/sandrogiacom/k8s" rel="noopener noreferrer"&gt;
        k8s
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Kubernetes resources
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;k8s&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Kubernetes development tools&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubectl&lt;/li&gt;
&lt;li&gt;Minikube&lt;/li&gt;
&lt;li&gt;Kubens&lt;/li&gt;
&lt;li&gt;Stern&lt;/li&gt;
&lt;li&gt;VirtualBox&lt;/li&gt;
&lt;li&gt;OpenShift&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Clone this repository&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;git clone https://github.com/sandrogiacom/k8s.git&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Prerequisite&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Make&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;sudo apt install make&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo pacman -S make&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Install tools&lt;/h1&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;All tools&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-all OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Separate tools&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Docker&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-docker OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;VirtualBox&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-vbox OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Kubectl&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-kubectl OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Minikube&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-minikube OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;OpenShift&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;make install-oc OS=deb&lt;/code&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Os Types&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;deb: Deabian , Mint, Ubuntu&lt;/li&gt;
&lt;li&gt;arch: Arch Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sandrogiacom/k8s" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  Check if works
&lt;/h2&gt;

&lt;p&gt;Type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;minikube version
minikube version: v1.1.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;kubectl version
Client Version: version.Info&lt;span class="o"&gt;{&lt;/span&gt;Major:&lt;span class="s2"&gt;"1"&lt;/span&gt;, Minor:&lt;span class="s2"&gt;"14"&lt;/span&gt;, GitVersion:&lt;span class="s2"&gt;"v1.14.2"&lt;/span&gt;...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;virtualbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F289lmoijsoqsnoa7bthk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F289lmoijsoqsnoa7bthk.png" width="607" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start minikube
&lt;/h2&gt;

&lt;p&gt;To start minikube, just type &lt;code&gt;minikube start&lt;/code&gt; on the terminal.&lt;br&gt;
The command above creates the virtual machine with default values:&lt;br&gt;
If you want to start with different flags, type &lt;code&gt;minikube start -h&lt;/code&gt; to complete list&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The most important flags, is:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;--vm-driver: VM driver is one of: virtualbox parallels vmwarefusion kvm xhyve hyperv hyperkit kvm2 vmware none. default "virtualbox"&lt;/li&gt;
&lt;li&gt;--memory int: Amount of RAM allocated to the minikube VM in MB (default 2048)&lt;/li&gt;
&lt;li&gt;--cpus int: Number of CPUs allocated to the minikube VM (default 2)&lt;/li&gt;
&lt;li&gt;--profile: The name of the minikube VM being used.    This can be modified to allow for multiple minikube instances to be run independently (default "minikube")&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;minikube start -p dev.to --cpus 2 --memory=4096&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;minikube -p dev.to dashboard&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can use Dashboard to get an overview of applications running on your cluster, as well as for creating or modifying individual Kubernetes resources (such as Deployments, Jobs, DaemonSets, etc). &lt;/p&gt;

&lt;h2&gt;
  
  
  Create a namespace
&lt;/h2&gt;

&lt;p&gt;It's a good practice to create a &lt;code&gt;namespace&lt;/code&gt; for separating your workspace. Type:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;kubectl create namespace dev-to&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Enable ingress
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;minikube -p dev.to addons enable ingress&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ingress exposes HTTP and HTTPS routes from outside the cluster to services within the cluster. Traffic routing is controlled by rules defined on the Ingress resource.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop minikube machine
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;minikube -p dev.to stop&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Destroy minikube machine
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;minikube -p dev.to delete&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;To be continued...&lt;/p&gt;

&lt;p&gt;In this tutorial, we learn how to start a local kubernetes cluster and prepare to deploy our own application. In the next post, we will prepare a Java application to be deployed in the Kubernetes cluster.&lt;/p&gt;

&lt;p&gt;See you soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/arun-gupta/kubernetes-for-java-developers" rel="noopener noreferrer"&gt;https://github.com/arun-gupta/kubernetes-for-java-developers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/arun-gupta/kubernetes-java-sample/blob/master/workshop.adoc#create-kubernetes-cluster" rel="noopener noreferrer"&gt;https://github.com/arun-gupta/kubernetes-java-sample/blob/master/workshop.adoc#create-kubernetes-cluster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developers.redhat.com/blog/2018/06/28/why-kubernetes-is-the-new-application-server/" rel="noopener noreferrer"&gt;https://developers.redhat.com/blog/2018/06/28/why-kubernetes-is-the-new-application-server/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>containers</category>
    </item>
    <item>
      <title>Multiple JDKs? No problem!</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Mon, 17 Jun 2019 18:28:53 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/multiple-jdks-no-problem-1knc</link>
      <guid>https://dev.to/sandrogiacom/multiple-jdks-no-problem-1knc</guid>
      <description>&lt;p&gt;Have you had problems with several versions of Java on your machine? Do you lose time configuring the environment variables? There is an elegant solution in the Linux world and it is called &lt;strong&gt;jEnv&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Motivation
&lt;/h1&gt;

&lt;p&gt;You need to maintain your Java programs written in Java 8 or even lower. Develop applications with Java 11 and still try Java 12 or 13. Certainly you will have problems.&lt;/p&gt;

&lt;h1&gt;
  
  
  Scenario
&lt;/h1&gt;

&lt;p&gt;Assuming you already have a development environment with Java 8 and Maven. In the examples, I'll be using Linux Mint.&lt;br&gt;
It is common to have problems when we have more than one version of Java on the same machine. To solve this, we end up doing several scripts to change JAVA_HOME, using the alternatives framework and we often need to restart the user session for the changes to take effect.&lt;/p&gt;
&lt;h1&gt;
  
  
  Installing OpenJDK 11 with JDK 8
&lt;/h1&gt;

&lt;p&gt;The idea is to keep the current version of your Java, install JDK 11 and run one version or another as the project needs. We'll see how easy it is to manage this with some tools. When I refer to Java 11, JDK or OpenJDK, I will always be referring to OpenJDK 11.&lt;/p&gt;
&lt;h2&gt;
  
  
  Download OpenJDK:
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.1_linux-x64_bin.tar.gz
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo tar &lt;/span&gt;xvf openjdk-11.0.1_linux-x64_bin.tar.gz &lt;span class="nt"&gt;--directory&lt;/span&gt; /usr/lib/jvm/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After that, if you run the command &lt;code&gt;java -version&lt;/code&gt; you will see that nothing has changed and we continue with Java 8:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;java &lt;span class="nt"&gt;-version&lt;/span&gt;
java version &lt;span class="s2"&gt;"1.8.0_191"&lt;/span&gt; Java&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; SE Runtime Environment &lt;span class="o"&gt;(&lt;/span&gt;build 1.8.0_191-b12&lt;span class="o"&gt;)&lt;/span&gt;Java HotSpot&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; 64-Bit Server VM &lt;span class="o"&gt;(&lt;/span&gt;build 25.191-b12, mixed mode&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maven is still there with the current Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;mvn &lt;span class="nt"&gt;-version&lt;/span&gt;
Apache Maven 3.5.4 &lt;span class="o"&gt;(&lt;/span&gt;1edded0938998edf8bf061f1ceb3cfdeccf443fe&lt;span class="p"&gt;;&lt;/span&gt; 2018-06-17T15:33:14-03:00&lt;span class="o"&gt;)&lt;/span&gt; Maven home: /opt/maven Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-oracle/jre
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To check if Java 11 is ok, just run the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;/usr/lib/jvm/jdk-11.0.1/bin/java &lt;span class="nt"&gt;-version&lt;/span&gt;
openjdk version &lt;span class="s2"&gt;"11.0.1"&lt;/span&gt; 2018-10-16 OpenJDK Runtime Environment 18.9 &lt;span class="o"&gt;(&lt;/span&gt;build 11.0.1+13&lt;span class="o"&gt;)&lt;/span&gt; OpenJDK 64-Bit Server VM 18.9 &lt;span class="o"&gt;(&lt;/span&gt;build 11.0.1+13, mixed mode&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ready! We have both versions of Java on the same machine, now what?&lt;/p&gt;

&lt;p&gt;Assuming most of our projects will be with Java 8 for some time, let's define this version as "global" and Java 11 as the "local" version.&lt;/p&gt;

&lt;h1&gt;
  
  
  jEnv
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://www.jenv.be/" rel="noopener noreferrer"&gt;jEnv&lt;/a&gt; is a command-line tool to help you forget how to set the JAVA_HOME environment variable. It is a tool that allows you to configure Java versions in a global or local way.&lt;br&gt;
Assuming we already have Java 8 installed and configured using it with maven for example.&lt;/p&gt;
&lt;h1&gt;
  
  
  Installing jEnv:
&lt;/h1&gt;

&lt;p&gt;This tool is only available for Linux and Mac. To install on Linux, follow the steps below (assuming you have git installed):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/gcuisinier/jenv.git ~/.jenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.jenv/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bash_profile
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(jenv init -)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use Zsh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.jenv/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(jenv init -)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Close the terminal and open it again. Run the &lt;code&gt;jenv&lt;/code&gt; command&lt;/p&gt;

&lt;p&gt;If everything is ok, you should see the message &lt;code&gt;jenv&lt;/code&gt; + &lt;code&gt;version&lt;/code&gt;. Ex: jenv 0.5.1-5-gaf89d78&lt;/p&gt;

&lt;p&gt;If it does not work, perform step 2, for bashrc instead of bash_profile&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'export PATH="$HOME/.jenv/bin:$PATH"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'eval "$(jenv init -)"'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Adding Java versions to jEnv:
&lt;/h2&gt;

&lt;p&gt;Java 8:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;jenv add /usr/lib/jvm/java-8-oracle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java 11:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;jenv add /usr/lib/jvm/jdk-11.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check java versions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;jenv versions
  system
  11.0
  11.0.1 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;set &lt;/span&gt;by /home/sandro/.jenv/version&lt;span class="o"&gt;)&lt;/span&gt;
  1.8
  1.8.0.191
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Running
&lt;/h2&gt;

&lt;p&gt;Assuming you need to keep Java 8 as default for legacy applications and use Java 11 in certain projects or directories.&lt;/p&gt;

&lt;p&gt;Defining a global version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;jenv global 1.8.0.191
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Defining the local version (per directory):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;jenv &lt;span class="nb"&gt;local &lt;/span&gt;11.0.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;We install Java 11 without compromising the environment that is already working with Java 8. We install and configure the jEnv tool, generate and compile a Java 11 project. In the next post, we will analyze a Java 8 application and see if we can run it in Java 11.&lt;/p&gt;

&lt;p&gt;If you have any questions or problems, leave a comment. Thanks for reading.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.jenv.be/" rel="noopener noreferrer"&gt;http://www.jenv.be/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>jdk</category>
      <category>jenv</category>
      <category>maven</category>
    </item>
    <item>
      <title>Run MySQL on Docker and use in your Java App</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Wed, 12 Jun 2019 17:16:08 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/run-mysql-on-docker-and-use-in-your-java-app-jpn</link>
      <guid>https://dev.to/sandrogiacom/run-mysql-on-docker-and-use-in-your-java-app-jpn</guid>
      <description>&lt;p&gt;Running MySQL in Docker is very useful to use in development. In this tutorial, we will see how easy it is to start MySQL in Docker and use it in our Java application with Spring Boot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare
&lt;/h2&gt;

&lt;p&gt;First, you need a docker runtime on you machine. If you don't have it, please install following this docker documentation: &lt;a href="https://docs.docker.com/install/" rel="noopener noreferrer"&gt;https://docs.docker.com/install/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start Mysql container
&lt;/h2&gt;

&lt;p&gt;To start the container, type the command below in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; mysql57 &lt;span class="nt"&gt;-p&lt;/span&gt; 3306:3306 &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1234 &lt;span class="nt"&gt;-d&lt;/span&gt; mysql/mysql-server:5.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The command above, pulled image if not found in local repository and run mysql container in detached mode. Configure local port equals to container port and set root password to &lt;code&gt;1234&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Check your container running:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                   PORTS                               NAMES
380eca8a553c        mysql/mysql-server:5.7    &lt;span class="s2"&gt;"/entrypoint.sh mysq…"&lt;/span&gt;   8 minutes ago       Up 8 minutes &lt;span class="o"&gt;(&lt;/span&gt;healthy&lt;span class="o"&gt;)&lt;/span&gt;   0.0.0.0:3306-&amp;gt;3306/tcp, 33060/tcp   mysql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;As we can see, mysql5.7 is running on localhost:3306&lt;br&gt;
At this point, you have a local mysql server without install it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You will not have external access to the container with root user.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Create a database
&lt;/h2&gt;

&lt;p&gt;Type:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; mysql57 bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This command access the mysql container and allow to execute commands on database. Inside a container, type:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql &lt;span class="nt"&gt;-h&lt;/span&gt; localhost &lt;span class="nt"&gt;-u&lt;/span&gt; root &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Remember, the password is &lt;code&gt;1234&lt;/code&gt;. First, we need to create a user for out-of-container access because root access is not allowed:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CREATE USER &lt;span class="s1"&gt;'demo_java'&lt;/span&gt; IDENTIFIED BY &lt;span class="s1"&gt;'java'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
grant all on &lt;span class="k"&gt;*&lt;/span&gt;.&lt;span class="k"&gt;*&lt;/span&gt; to &lt;span class="s1"&gt;'demo_java'&lt;/span&gt;@&lt;span class="s1"&gt;'%'&lt;/span&gt; identified by &lt;span class="s1"&gt;'1234'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
FLUSH PRIVILEGES&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;To create a database, paste DDL bellow:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;CREATE DATABASE hello_java CHARACTER SET utf8 COLLATE utf8_general_ci&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Next, type:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;show databases&lt;span class="p"&gt;;&lt;/span&gt;
+--------------------+
| Database           |
+--------------------+
| hello_java         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0.00 sec&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Create a database automatically
&lt;/h2&gt;

&lt;p&gt;Another way to start a database and automatic create a &lt;code&gt;hello_java&lt;/code&gt; database and &lt;code&gt;demo_java&lt;/code&gt; user:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--name&lt;/span&gt; mysql57 &lt;span class="nt"&gt;-p&lt;/span&gt; 3306:3306 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1234 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;demo_java &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1234 &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nv"&gt;MYSQL_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hello_java &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-d&lt;/span&gt; mysql/mysql-server:5.7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;With the above command, you do not have to enter the database and create a database and a user. Cool, is not it?&lt;/p&gt;
&lt;h2&gt;
  
  
  Create Demo App
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt; and create a demo app with the &lt;em&gt;Web&lt;/em&gt; and &lt;em&gt;Jpa&lt;/em&gt; dependencies.&lt;/p&gt;

&lt;p&gt;Import application in your IDE and follow steps below:&lt;/p&gt;

&lt;p&gt;1 - Edit &lt;code&gt;application.properties&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;spring.datasource.url=jdbc:mysql://localhost:3306/hello_java
spring.datasource.username=demo_java
spring.datasource.password=1234
spring.jpa.hibernate.ddl-auto=update

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;spring.jpa.hibernate.ddl-auto=update&lt;/strong&gt; creates the &lt;code&gt;person&lt;/code&gt; table if it doesn't exist.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It's not recommended to use in production.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2 - Edit &lt;code&gt;pom.xml&lt;/code&gt; file and add mysql connector java&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;mysql&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;mysql-connector-java&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;3 - Add domain, service and persistence classes:&lt;br&gt;
&lt;strong&gt;Domain&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2zjdzt3uy7d870gvzl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2zjdzt3uy7d870gvzl2.png" width="585" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repository&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd42csbo6vbjz5s6hugex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd42csbo6vbjz5s6hugex.png" width="541" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfgmqgkzgp6axlnvhgx7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfgmqgkzgp6axlnvhgx7.png" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4 - Change main class to create two new Person:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtjy3jkqvzb9utvcj9j9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtjy3jkqvzb9utvcj9j9.png" width="795" height="455"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Run Demo App
&lt;/h2&gt;

&lt;p&gt;Start demo app just running a main class:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application is running and data is persistent in database&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqg99pgixyrbjo4lfgsu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqg99pgixyrbjo4lfgsu.png" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Bonus
&lt;/h2&gt;

&lt;p&gt;To expose your data as a Rest endpoint, just add this dependency:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;org.springframework.boot&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;spring-boot-starter-data-rest&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Access &lt;a href="http://localhost:8080/persons" rel="noopener noreferrer"&gt;http://localhost:8080/persons&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And Wow! Your data exposed as json.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2455ejkytd9l1b8znxv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2455ejkytd9l1b8znxv3.png" width="548" height="611"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Source code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sandrogiacom" rel="noopener noreferrer"&gt;
        sandrogiacom
      &lt;/a&gt; / &lt;a href="https://github.com/sandrogiacom/database-demo" rel="noopener noreferrer"&gt;
        database-demo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;database-demo&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;Source code for the post: Run MySQL on Docker and use in your Java App&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sandrogiacom/run-mysql-on-docker-and-use-in-your-java-app-jpn" rel="nofollow"&gt;https://dev.to/sandrogiacom/run-mysql-on-docker-and-use-in-your-java-app-jpn&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sandrogiacom/database-demo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


</description>
      <category>docker</category>
      <category>container</category>
      <category>mysql</category>
      <category>java</category>
    </item>
    <item>
      <title>Monitoring Java Microservices with JavaMelody</title>
      <dc:creator>Sandro Giacomozzi</dc:creator>
      <pubDate>Sat, 08 Jun 2019 19:04:51 +0000</pubDate>
      <link>https://dev.to/sandrogiacom/monitoring-java-microservices-with-javamelody-1ndg</link>
      <guid>https://dev.to/sandrogiacom/monitoring-java-microservices-with-javamelody-1ndg</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/javamelody/javamelody" rel="noopener noreferrer"&gt;&lt;strong&gt;Javamelody&lt;/strong&gt;&lt;/a&gt; is an open source project that helps you get metrics from your service. With it you can discover possible failures before sending you code to production. It is very easy to include in your application and in this tutorial, we will show you how to do it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating Demo App
&lt;/h2&gt;

&lt;p&gt;Let's start creating a spring boot application. Access &lt;a href="https://start.spring.io/" rel="noopener noreferrer"&gt;https://start.spring.io/&lt;/a&gt; to generate our demo app. You can use your own package name on Group field.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhryeh5byee8q5u0322se.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhryeh5byee8q5u0322se.png" width="800" height="435"&gt;&lt;/a&gt;&lt;br&gt;
And add only Web dependency&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadteb9q86ytkd9ppcl7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fadteb9q86ytkd9ppcl7j.png" width="800" height="321"&gt;&lt;/a&gt;&lt;br&gt;
And then, generate project.&lt;/p&gt;

&lt;p&gt;A zip file will be generated with our project and can be imported into your preferred IDE.&lt;br&gt;
A generated project looks like this:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eqsdhnw8pbwraczrdpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eqsdhnw8pbwraczrdpb.png" width="800" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you prefer to use this demo code, clone the github project:&lt;br&gt;
&lt;a href="https://github.com/sandrogiacom/javamelody-spring-demo" rel="noopener noreferrer"&gt;https://github.com/sandrogiacom/javamelody-spring-demo&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Add JavaMelody dependency
&lt;/h2&gt;

&lt;p&gt;Now, let's add javamelody's spring boot dependency&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;groupId&amp;gt;&lt;/span&gt;net.bull.javamelody&lt;span class="nt"&gt;&amp;lt;/groupId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;javamelody-spring-boot-starter&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;1.77.0&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Run app
&lt;/h2&gt;

&lt;p&gt;Next you can run your spring-boot application and open &lt;a href="http://localhost:8080/monitoring" rel="noopener noreferrer"&gt;http://localhost:8080/monitoring&lt;/a&gt; to browse the monitoring reports.&lt;/p&gt;

&lt;p&gt;The metrics will begin to be captured, but we still do not have code in our application. Let's create a rest endpoint.&lt;/p&gt;
&lt;h2&gt;
  
  
  Create a Rest Controller
&lt;/h2&gt;

&lt;p&gt;Add a new class HelloController as below:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nd"&gt;@RestController&lt;/span&gt;
&lt;span class="nd"&gt;@RequestMapping&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/hello"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;HelloController&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@GetMapping&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;sayHello&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;"Hello JavaMelody!"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Restart your application and open &lt;a href="http://localhost:8080/hello" rel="noopener noreferrer"&gt;http://localhost:8080/hello&lt;/a&gt;&lt;br&gt;
Run this URL many times. After that, open &lt;a href="http://localhost:8080/monitoring" rel="noopener noreferrer"&gt;http://localhost:8080/monitoring&lt;/a&gt; again.&lt;/p&gt;
&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;As you can see, the metrics began to be collected:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4tpl2fucyiy6g91arxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4tpl2fucyiy6g91arxa.png" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53rx3aay3g3gzptk3pj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53rx3aay3g3gzptk3pj0.png" width="800" height="267"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  More JavaMelody Resources
&lt;/h2&gt;

&lt;p&gt;JavaMelody has many, many features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugins: (Jenkins, JIRA, Bamboo, Liferay, Alfresco, Sonar, Grails)&lt;/li&gt;
&lt;li&gt;PDF report generation (Weekly, daily or monthly reports by mail)&lt;/li&gt;
&lt;li&gt;Scripts and alerts (Jenkins with Groovy)&lt;/li&gt;
&lt;li&gt;Centralized Monitoring Server&lt;/li&gt;
&lt;li&gt;Real User Monitoring&lt;/li&gt;
&lt;li&gt;Database monitoring&lt;/li&gt;
&lt;li&gt;Sending metrics to AWS CloudWatch, Graphite&lt;/li&gt;
&lt;li&gt;Custom reports, styles, icons and other resources&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;JavaMelody helps you anticipate problems with your application. For best results, use with some stress tool, such as &lt;a href="https://jmeter.apache.org/" rel="noopener noreferrer"&gt;JMeter&lt;/a&gt;.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/sandrogiacom" rel="noopener noreferrer"&gt;
        sandrogiacom
      &lt;/a&gt; / &lt;a href="https://github.com/sandrogiacom/javamelody-spring-demo" rel="noopener noreferrer"&gt;
        javamelody-spring-demo
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      How to monitoring your spring boot app with Javamelody
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;javamelody-spring-demo&lt;/h1&gt;

&lt;/div&gt;

&lt;p&gt;How to monitoring your spring boot app with Javamelody&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/sandrogiacom/monitoring-java-microservices-with-javamelody-1ndg" rel="nofollow"&gt;https://dev.to/sandrogiacom/monitoring-java-microservices-with-javamelody-1ndg&lt;/a&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;br&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/sandrogiacom/javamelody-spring-demo" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;&lt;a href="https://twitter.com/sandrogiacom" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3hk69dlodu18eckmzyx.png" width="200" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>opensource</category>
      <category>monitoring</category>
    </item>
  </channel>
</rss>
