起因
ストリーミングタスクを通じてユーザーアクセスログを分析するプロセスでは、ユーザーのリモートIPを対応する州や都市に解析する必要があります。このプロセスでは、ipライブラリファイルをロードする必要があります。ipライブラリファイルはプロジェクトsrc / main / resourcesの特定のディレクトリに統合されていますが、ロードプロセス中にエラーが報告されます。
net.ipip.ipdb.InvalidDatabaseException: database file size error
at net.ipip.ipdb.Reader.init(Reader.java:58)
at net.ipip.ipdb.Reader.<init>(Reader.java:25)
at net.ipip.ipdb.Reader.<init>(Reader.java:21)
at net.ipip.ipdb.City.<init>(City.java:17)
at com.xxx.xxx.util.IpDbUtils.<clinit>(IpDbUtils.java:24)
分析
IPライブラリがclassesディレクトリにコピーされている場合に実行できます。問題はIPライブラリ自体にあるとは言えないのに、Mavenがパッケージ化された後に実行できないのはなぜですか?
インターネットで何度も検索したところ、maven-resources-pluginが問題の原因であることが判明しました。mavenがパッケージ化されている場合、特定のファイルがエンコードされ、ファイルは使用できません。
解決する
プロジェクトをMavenパッケージ化するプロセスでは、プロジェクトを均一にエンコードするようにpom.xml構成ファイルを構成できますが、IPライブラリファイル、証明書ファイルなど、一部のファイルを再エンコードする必要がない場合があります。 -エンコードすると、ファイルが使用できなくなる可能性があります。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<!-- 需要过滤那些后缀的文件 -->
<nonFilteredFileExtension>ipdb</nonFilteredFileExtension>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
その後。。。全て大丈夫!