我有3个在Linux上运行的java进程,可以进行数据库查询(MariaDB)和一些文件IO(硬盘和USB)。有时会发生什么,来自一个进程的写操作不会反映在其他java进程上。
两种情况:
我怀疑在刚刚写入的数据访问数据的多个进程之间存在一些缓存问题。
更多信息: JAVA:1.8 openJDK Linux:Fedora / CentOS
答案 0 :(得分:2)
您是否已提交交易?你的JDBC连接是自动提交吗?
您在发送路径之前是否关闭了文件?如果你不关闭文件,它仍然可以写入,OS和Java将缓冲写入。如果要连续编写文件并确保其他进程看到您的更改,可以使用特殊的API构造,请参阅FileChannel.force()或RandomAccessFile的同步模式。
答案 1 :(得分:0)
在几乎所有数据库中,只有一个进程可以安全地访问这些文件。通常,数据库将锁定文件以防止多个进程访问。可能在某些情况下这种情况有效,但除非数据库设计为这样做,否则我不会使用此功能。
顺便说一句:我们有一个专门用来做这个的数据库,所以我们知道这很简单,很少做。