私は自分のアプリケーションでJavaコードを以下の使用しています:例外:開いているファイルが多すぎます
protected String encryptContact(Long contactId) {
if (contactId != null) {
EncryptionFactoryBean enbe = new EncryptionFactoryBean(String.valueOf(contactId), "/etc/test/encrypt.properties");
try {
enbe.SetProperties();
return (String) enbe.getObject();
} catch (Exception e) {
return null;
}
}
return null;
}
EncryptionFactoryBean.java
public void setProperties()
throws Exception {
Assert.notNull(textToEncrypt, "encryption text cannot be null");
encryptionProperties = loadFile(encryptionFile);
super.setProperties();
}
protected Properties loadFile(String filename)
throws IOException {
Properties properties = null;
if (StringUtils.hasText(filename)) {
File file = new File(filename);
if (file.exists()) {
FileInputStream fi = new FileInputStream(file);
properties = new Properties();
properties.load(fi);
fi.close();
}
}
return properties;
}
でアプリケーションを実行するには、私は次のエラーを取得しています -
javax.servlet.ServletException:java.io.FileNotFoundException: /etc/test/encrypt.properties(多すぎますファイルを開く)
アプリケーションでファイル制限を増やすことはできません。この問題を解決する方法はありますか?ファイルハンドラを閉じることは可能ですかfinally
?
コンソールログエラー:の処理中におそらく
[org.apache.tomcat.util.net.JIoEndpoint] Socket accept failed java.net.SocketException: Too many open files
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:404)
at java.net.ServerSocket.implAccept(ServerSocket.java:545)
at java.net.ServerSocket.accept(ServerSocket.java:513)
at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)
at java.lang.Thread.run(Thread.java:745)
ほとんどの場合、アプリケーションのどこかでファイルを適切に閉じないでください。これは必ずしもあなたが示したコードにはありません。 – Henry
しかし例外は "FileNotFoundException:/etc/test/encrypt.properties"を示します。このコードは、/etc/test/encrypt.propertiesを使用している唯一の場所です。最終的にファイルを追加してファイルを閉じると、動作しますか? – Futuregeek
"オープンファイルが多すぎます"、/ etc/test/encrypt.propertiesはラクダの背中を壊す最後のストローです。 – Henry