【问题标题】:Apache James 2.3.2 won't write to MySQLApache James 2.3.2 不会写入 MySQL
【发布时间】:2014-12-11 00:56:16
【问题描述】:

我有一个工作的 Apache James 邮件服务器启动并运行,但只是将它转换为使用 MySQL 数据库而不是文件系统。
它创建了(一些)表,但不会写入它们。这使它不发送任何邮件。

由于它将与数据库交互并插入用户,我认为我的数据库数据源和用户配置正确......

<data-source name="maildb" class="org.apache.james.util.dbcp.JdbcDataSource">
    <driver>com.mysql.jdbc.Driver</driver>
    <dburl>jdbc:mysql://127.0.0.1/james</dburl>
    <user>xxxx</user>
    <password>yyyy</password>
    <max>20</max>
</data-source>

但是当我尝试发送电子邮件时,我没有收到来自客户端的错误,但我在任何表的数据库中都没有收到任何信息。 我得到的只是詹姆斯控制台上的这个错误......

exception! javax.mail.MessagingException: Exception caught while storing mail Container: ;
  nested exception is:
        com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1

这是来自 mailet 日志的完整堆栈跟踪...

10/12/14 16:23:18 INFO  James.Mailet: Error while storing mail.
javax.mail.MessagingException: Exception caught while storing mail Container: ;
  nested exception is:
    com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:764)
    at org.apache.james.transport.mailets.ToMultiRepository.storeMail(ToMultiRepository.java:230)
    at org.apache.james.transport.mailets.ToMultiRepository.service(ToMultiRepository.java:154)
    at org.apache.james.transport.mailets.LocalDelivery.service(LocalDelivery.java:66)
    at org.apache.james.transport.LinearProcessor.service(LinearProcessor.java:424)
    at org.apache.james.transport.JamesSpoolManager.process(JamesSpoolManager.java:405)
    at org.apache.james.transport.JamesSpoolManager.run(JamesSpoolManager.java:309)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '' for column 'last_updated' at row 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2973)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
    at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1129)
    at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:681)
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:803)
    at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:168)
    at org.apache.james.mailrepository.JDBCMailRepository.store(JDBCMailRepository.java:752)
10/12/14 16:23:18 INFO  James.Mailet: ToRepository: Storing mail Mail1418257398530-1 in dbfile://maildb/deadletter/error

这是我指定存储库的方式...

<mailet match="All" class="ToRepository">
    <repositoryPath> db://maildb/deadletter/error </repositoryPath>
</mailet>

因为它似乎在抱怨一个空的 last_updated 日期时间,所以我允许该列为空,但这并没有帮助。 我不会以任何方式更改java,所以不应该有什么我搞砸的。我什至不知道它从哪里得到日期时间。

谁能看到我错过的东西?

【问题讨论】:

    标签: java mysql apache james


    【解决方案1】:

    已解决:我在 Apache 错误档案中发现了一篇不知名的帖子,其中提到了添加此参数...

    <dburl>jdbc:mysql://127.0.0.1/james?useServerPrepStmts=false</dburl> 
    

    ...到数据源区域。实际上,帖子说在这里添加2个参数,但我发现它只会接受一个参数。

    我不知道我应该如何知道这些参数或它们的作用,但这让一切都神奇地发挥了作用。有时使用开源软件会教你更多关于研究而不是编程的知识。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-04
      • 2021-08-26
      • 1970-01-01
      • 2012-12-31
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多