<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.    
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Generated by Apache Maven Doxia at 2021-11-12 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache James Project &#x2013; Apache James Server 3 - Spring JPA With Postgres Configuration</title>
    <style type="text/css" media="all">
      @import url("../css/james.css");
      @import url("../css/maven-base.css");
      @import url("../css/maven-theme.css");
      @import url("../css/site.css");
      @import url("../js/jquery/css/custom-theme/jquery-ui-1.8.5.custom.css");
      @import url("../js/jquery/css/print.css");
      @import url("../js/fancybox/jquery.fancybox-1.3.4.css");
    </style>
    <script type="text/javascript" src="../js/jquery/js/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="../js/jquery/js/jquery-ui-1.8.5.custom.min.js"></script>
    <script type="text/javascript" src="../js/fancybox/jquery.fancybox-1.3.4.js"></script>
    <link rel="stylesheet" href="../css/print.css" type="text/css" media="print" />
    <meta name="Date-Revision-yyyymmdd" content="20211112" />
    <meta http-equiv="Content-Language" content="en" />
        
          <!-- Google Analytics -->
    <script type="text/javascript">
    
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1384591-1']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script').item(0); s.parentNode.insertBefore(ga, s);
      })();

    </script>
    </head>
  <body class="composite">
    <div id="banner">
                                      <a href="../index.html" id="bannerLeft" title="james-logo.png">
              
                                                                            
        <img src="../images/logos/james-logo.png" alt="James Project" />
                </a>
                              <a href="https://www.apache.org/index.html" id="bannerRight">
              
                                        
        <img src="images/logos/asf_logo_small.png" alt="The Apache Software Foundation" />
                </a>
            <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="breadcrumbs">
            
                
                <div class="xleft">
        <span id="publishDate">Last Published: 2021-11-12</span>
                      </div>
            <div class="xright">                    <a href="../index.html" title="Home">Home</a>
            |
                        <a href="../documentation.html" title="James">James</a>
            |
                        <a href="../mime4j/index.html" title="Mime4J">Mime4J</a>
            |
                        <a href="../jsieve/index.html" title="jSieve">jSieve</a>
            |
                        <a href="../jspf/index.html" title="jSPF">jSPF</a>
            |
                        <a href="../jdkim/index.html" title="jDKIM">jDKIM</a>
              
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
    <div id="leftColumn">
      <div id="navcolumn">
             
                
                                <h5>James components</h5>
                  <ul>
                                                                                                                                                                                                                    <li class="collapsed">
                          <a href="../documentation.html" title="About James">About James</a>
                  </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <li class="expanded">
                          <a href="../server/index.html" title="Server">Server</a>
                    <ul>
                      <li class="none">
                          <a href="../server/advantages.html" title="Advantages">Advantages</a>
            </li>
                      <li class="none">
                          <a href="../server/objectives.html" title="Objectives">Objectives</a>
            </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      <li class="expanded">
                          <a href="../server/quick-start.html" title="User Manual">User Manual</a>
                    <ul>
                                                                                                                                                                                    <li class="collapsed">
                          <a href="../server/features.html" title="1. Features">1. Features</a>
                  </li>
                      <li class="none">
                          <a href="../server/packaging.html" title="2. Packaging">2. Packaging</a>
            </li>
                                                                                                                              <li class="collapsed">
                          <a href="../server/install.html" title="3. Install James">3. Install James</a>
                  </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <li class="expanded">
                          <a href="../server/config.html" title="4. Configure James">4. Configure James</a>
                    <ul>
                      <li class="none">
                          <a href="../server/config-listeners.html" title="Additional mailbox listeners">Additional mailbox listeners</a>
            </li>
                      <li class="none">
                          <a href="../server/config-antispam.html" title="Anti Spam">Anti Spam</a>
            </li>
                      <li class="none">
                          <a href="../server/config-blob-export.html" title="Blob Export">Blob Export</a>
            </li>
                      <li class="none">
                          <a href="../server/config-blobstore.html" title="BlobStore">BlobStore</a>
            </li>
                      <li class="none">
                          <a href="../server/config-cassandra.html" title="Cassandra">Cassandra</a>
            </li>
                      <li class="none">
                          <a href="../server/config-elasticsearch.html" title="ElasticSearch">ElasticSearch</a>
            </li>
                      <li class="none">
                          <a href="../server/config-vault.html" title="Deleted Messages Vault">Deleted Messages Vault</a>
            </li>
                      <li class="none">
                          <a href="../server/config-dnsservice.html" title="DNS Service">DNS Service</a>
            </li>
                      <li class="none">
                          <a href="../server/config-domainlist.html" title="Domain List">Domain List</a>
            </li>
                      <li class="none">
                          <a href="../server/config-fetchmail.html" title="FetchMail">FetchMail</a>
            </li>
                      <li class="none">
                          <a href="../server/config-guice.html" title="Guice">Guice</a>
            </li>
                      <li class="none">
                          <a href="../server/config-imap4.html" title="IMAP4">IMAP4</a>
            </li>
                      <li class="none">
                          <a href="../server/config-jmap.html" title="JMAP">JMAP</a>
            </li>
                      <li class="none">
                          <a href="../server/config-mailrepositorystore.html" title="Mail Repository Stores">Mail Repository Stores</a>
            </li>
                      <li class="none">
                          <a href="../server/config-mailbox.html" title="Mailbox">Mailbox</a>
            </li>
                      <li class="none">
                          <a href="../server/config-mailetcontainer.html" title="Mailet Container">Mailet Container</a>
            </li>
                      <li class="none">
                          <a href="../server/config-healthcheck.html" title="Periodical Health Checks">Periodical Health Checks</a>
            </li>
                      <li class="none">
                          <a href="../server/config-pop3.html" title="POP3">POP3</a>
            </li>
                      <li class="none">
                          <a href="../server/config-quota.html" title="Quota">Quota</a>
            </li>
                      <li class="none">
                          <a href="../server/config-rabbitmq.html" title="RabbitMQ">RabbitMQ</a>
            </li>
                      <li class="none">
                          <a href="../server/config-recipientrewritetable.html" title="Recipient Rewrite">Recipient Rewrite</a>
            </li>
                      <li class="none">
                          <a href="../server/config-smtp-lmtp.html" title="SMTP LMTP">SMTP LMTP</a>
            </li>
                      <li class="none">
                          <a href="../server/config-sieve.html" title="Sieve">Sieve</a>
            </li>
                      <li class="none">
                          <a href="../server/config-ssl-tls.html" title="SSL/TLS">SSL/TLS</a>
            </li>
                      <li class="none">
                          <a href="../server/config-system.html" title="System">System</a>
            </li>
                      <li class="none">
            <strong>Spring JPA Postgres</strong>
          </li>
                      <li class="none">
                          <a href="../server/config-users.html" title="Users">Users</a>
            </li>
                      <li class="none">
                          <a href="../server/config-webadmin.html" title="WebAdmin">WebAdmin</a>
            </li>
              </ul>
        </li>
                                                                                                                              <li class="collapsed">
                          <a href="../server/manage.html" title="5. Manage">5. Manage</a>
                  </li>
                                                                                                            <li class="collapsed">
                          <a href="../server/monitor.html" title="6. Monitor">6. Monitor</a>
                  </li>
                                                                        <li class="collapsed">
                          <a href="../server/upgrade.html" title="7. Upgrade">7. Upgrade</a>
                  </li>
                                                                                                                                                                                                                                    <li class="collapsed">
                          <a href="../server/dev.html" title="8. Developers Corner">8. Developers Corner</a>
                  </li>
              </ul>
        </li>
                      <li class="none">
                          <a href="../mail.html#James_Mailing_lists" title="Mailing Lists">Mailing Lists</a>
            </li>
                      <li class="none">
                          <a href="../server/release-notes.html" title="Release Notes">Release Notes</a>
            </li>
                      <li class="none">
                          <a href="../server/apidocs/index.html" title="Javadoc">Javadoc</a>
            </li>
                      <li class="none">
                          <a href="https://issues.apache.org/jira/browse/JAMES" title="Issue Tracker">Issue Tracker</a>
            </li>
                      <li class="none">
                          <a href="https://github.com/apache/james-project" title="Sources">Sources</a>
            </li>
                      <li class="none">
                          <a href="../server/rfcs.html" title="RFCs">RFCs</a>
            </li>
                      <li class="none">
                          <a href="../download.cgi#Apache_James_Server" title="Download releases">Download releases</a>
            </li>
              </ul>
        </li>
                                                                                                                                                                                                                                                                          <li class="collapsed">
                          <a href="../mailet/index.html" title="Mailets">Mailets</a>
                  </li>
                                                                                                                                                                                                                                                                                      <li class="collapsed">
                          <a href="../mailbox/index.html" title="Mailbox">Mailbox</a>
                  </li>
                                                                                                                                                                                <li class="collapsed">
                          <a href="../protocols/index.html" title="Protocols">Protocols</a>
                  </li>
                                                                                                                                                                                      <li class="collapsed">
                          <a href="../mpt/index.html" title="MPT">MPT</a>
                  </li>
          </ul>
        <h5>Apache Software Foundation</h5>
  <ul>
    <li>
      <strong>
        <a title="ASF" href="http://www.apache.org/">ASF</a>
      </strong>
    </li>
    <li>
      <a title="Get Involved" href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a>
    </li>
    <li>
      <a title="FAQ" href="http://www.apache.org/foundation/faq.html">FAQ</a>
    </li>
    <li>
      <a title="License" href="http://www.apache.org/licenses/" >License</a>
    </li>
    <li>
      <a title="Sponsorship" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
    </li>
    <li>
      <a title="Thanks" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
    </li>
    <li>
      <a title="Security" href="http://www.apache.org/security/">Security</a>
    </li>
  </ul>
                       <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="poweredBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
      </a>
                   
                
            </div>
    </div>
    <div id="bodyColumn">
      <div id="contentBox">
        

 


    <section>
<h2><a name="Introduction"></a>Introduction</h2>
      
<p>Consult <a class="externalLink" href="http://james.apache.org/server/config-system.html">System Configuration</a> to get template, some examples and hints for the configuration with JPA.</p>
    </section>

    <section>
<h2><a name="Current_Supported_Relational_Database"></a>Current Supported Relational Database</h2>
      
<p>James supports Derby as a default database, you do not need to do any additional configuration if you are using Derby</p>
    </section>

    <section>
<h2><a name="Spring_JPA_With_Postgres_Configuration"></a>Spring JPA With Postgres Configuration</h2>
      
<p>If you wish to use Postgres as a database, please follow those steps to configure it</p>
      <section>
<h3><a name="Step_1:_Create_database_on_Postgres"></a>Step 1: Create database on Postgres</h3>

        
<p>You need to install Postgres or run Postgres with Docker</p>

        
<p>Example to install it on Debian:</p>
        
<div class="source">
<pre>
          sudo apt-get update &amp;&amp; sudo apt-get install postgresql-9.4 postgresql-client-9.4
        </pre></div>
        
<p>Example to pull and launch Postgres on docker</p>
        
<div class="source">
<pre>
          docker run --detach --name postgres library/postgres
        </pre></div>
        
<p>Postgres does not create database on the fly so you need to create the database manually if it does not exist. Here is the command to perform this action: </p>

        
<div class="source">
<pre>psql --username postgres --tuples-only --command &quot;SELECT 1 FROM pg_database WHERE dataname = '<b>database_name</b>'&quot; \
          | grep -q 1 || psql --username postgres --command &quot;CREATE DATABASE <b>database_name</b>&quot;</pre></div>

        
<dl>
          
<dt><b>database_name</b></dt>
          
<dd>The name of database</dd>
        </dl>

      </section>

      <section>
<h3><a name="Step_2:_Point_to_the_database_in_configuration_file"></a>Step 2: Point to the database in configuration file</h3>
        
<p>Change the content of james-database.properties and point to the 'database_name' created earlier</p>
        
<div class="source">
<pre>
          database.driverClassName=org.postgresql.Driver
          database.url=jdbc:postgresql://<b>ip_of_postgres</b>/<b>database_name</b>
          database.username=postgres
          database.password=postgres

          vendorAdapter.database=POSTGRESQL
        </pre></div>
        
<p>If you are using the James Spring docker image. You need to customise the configuration file of the docker container with those steps:</p>
          
<ul>
            
<li>Create a new james-database.properties file with above content</li>
            
<li>Then you can add the configuration file to docker container using --volume flag</li>
              
<div class="source">
<pre>
                --volume path_to_folder_which_contain_configuration_file/james-database.properties:/root/james-server-app-3.0.0-RC2-SNAPSHOT/conf/james-database.properties
              </pre></div>
          </ul>
      </section>

      <section>
<h3><a name="Step_3:_Copy_driver_class_to_the_right_place"></a>Step 3: Copy driver class to the right place</h3>
        
<p>Follow this link <a class="externalLink" href="https://jdbc.postgresql.org/download.html">Postgres Driver</a> to download the right version of the JDBC driver.</p>
        
<p>Copy that jar file to the <b>conf/lib/</b> folder of Spring James</p>
        
<p>If you are using the James Spring docker image, download the jar file then make it available on the classpath of your James instance using an additional docker volume: </p>
        
<div class="source">
<pre>
          --volume path_to_folder_which_contain_jar_file/:/root/james-server-app-3.0.0-RC2-SNAPSHOT/conf/lib/
        </pre></div>
      </section>

      <section>
<h3><a name="Step_4:_Restart_James"></a>Step 4: Restart James</h3>
        
<p>Follow the guide on <a class="externalLink" href="http://james.apache.org/server/install.html">Restart and Testing</a> to restart James</p>

        
<p>If you are using the James Spring docker image, launch James docker or just stop and start docker container again if it ran. </p>

        
<p>Example to launch James Spring docker image with the volume</p>
        
<div class="source">
<pre>
          docker run --volume path_to_folder_which_contain_configuration_file/james-database.properties:/root/james-server-app-3.0.0-RC2-SNAPSHOT/conf/james-database.properties \
          --volume path_to_folder_which_contain_jar_file/:/root/james-server-app-3.0.0-RC2-SNAPSHOT/conf/lib/ \
          --hostname localhost --publish &quot;25:25&quot; --publish &quot;110:110&quot; --publish &quot;143:143&quot; --publish &quot;465:465&quot; --publish &quot;587:587&quot; --publish &quot;993:993&quot; \
          --name james_run linagora/james-jpa-spring
        </pre></div>
      </section>
    </section>




      </div>
    </div>
    <div class="clear">
      <hr/>
    </div>
    <div id="footer">
      <div class="xright">Copyright &#169;                    2006-2021
                        <a href="https://www.apache.org/">The Apache Software Foundation</a>.
            All Rights Reserved.      
                
      </div>
      <div class="clear">
        <hr/>
      </div>
    </div>
  </body>
</html>
