1. 程式人生 > >James的儲存方式:檔案與資料庫

James的儲存方式:檔案與資料庫

                            James的儲存方式:檔案與資料庫


轉載:https://blog.csdn.net/Earl_yuan/article/details/50452018

郵件資料儲存選擇,根據xml來看,提供的有3中資料儲存方式:
1.file:// 檔案儲存
2.db:// 資料庫儲存
3.dbfile:// 資料檔案式儲存
預設情況下,James在其james-2.3.2\apps\james\var\users路徑下將使用者資訊以檔案形式儲存。它還提供了以資料庫為儲存介質來儲存的形式。下面就來說說如何將伺服器資料儲存到資料庫中。 
James將各種資訊都使用配置檔案來進行管理,所以要改變儲存介質,我們需要修改james-2.3.2\apps\james\SAR-INF路徑下的config.xml這個非常重要的配置檔案。找到<users-store>

,這個標籤內部管理的是儲存介質,如下:
 

<users-store>
  <repository name="LocalUsers" class="org.apache.james.userrepository.UsersFileRepository">
     <destination URL="file://var/users/"/>
  </repository>

<!--
  <repository name="LocalUsers" class="org.apache.james.userrepository.JamesUsersJdbcRepository" destinationURL="db://maildb/users">
     <sqlFile>file://conf/sqlResources.xml</sqlFile>
  </repository>
</users-store>
-->

將UsersFileRepository內容註釋掉,將原本註釋掉的JamesUsersJdbcRepository去掉註釋。這時我們就將使用檔案作為儲存介質修改為使用資料庫作為儲存介質。 

配置SPOOL到MySQL資料庫

在config.xml找到

<spoolrepository destinationURL="file://var/mail/spool/" type="SPOOL"/>  

註釋之,新增如下配置

<spoolrepository destinationURL="db://maildb/spool/spool" type="SPOOL"/>

使用資料庫就需要配置資料庫的連線資訊,所以我們還需要修改資料來源的配置,這裡我們使用的是mysql資料庫。還是在config.xml中,找到如下關於mysql的data-source配置,去掉註釋,並設定當前資料庫連線相關資訊。
 

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
    <driver>com.mysql.jdbc.Driver</driver>
    <dburl>jdbc:mysql://127.0.0.1/mail?autoReconnect=true</dburl>
    <user>root</user>
    <password>123456</password>
    <max>20</max>
</data-source>

接下來還需要修改收信郵箱的配置資訊,預設依舊是儲存在james-2.3.2\apps\james\var\mail\inboxes路徑下,所以我們現在需要將其修改為儲存到資料表中。依舊是config.xml,找到<inboxRepository>的配置,如下:
 

<inboxRepository>
    <repository destinationURL="file://var/mail/inboxes/" type="MAIL"/>
</inboxRepository>

<!--
<inboxRepository>
    <repository destinationURL="db://maildb/inbox/" type="MAIL"/>
</inboxRepository>
-->

將以檔案儲存的內容註釋掉,將資料庫儲存的內容去掉註釋。 
到這裡,儲存介質的切換就完成了。在資料庫中新建資料庫mail,重啟James,然後使用adduser命令新增使用者,再看mail資料庫,新建了三張表users,inbox,spool。表users儲存的是郵件伺服器的使用者資訊。表inbox儲存的是收件箱的內容。表spool儲存的是還未檢視的郵件,一旦郵件被檢視,就會從這張表中刪除,轉而儲存到inbox中。

如果啟動James報錯,首行是java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver......說明了沒有發現MySQl的資料庫驅動。還需要從Apache官方下載MySQL的驅動包我用的是mysql-connector-java-5.1.6-bin.jar將其放到james-2.3.1的lib目錄下。