私はJava EEプロジェクト(以下の設定)に取り組んでおり、通常の例外であると思われるものに直面しています:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
eclipseとTomcatを使用したJava EE:ドライバが見つかりません
Tomcat 7とMavenが埋め込まれたEclipseで作業していますが、テスト用にドライバが見つかったとしてもTomcatでは見つかりませんでした。
私はいくつかの回答1、2と3検索が、アドバイスは不明であった。 mysql-connector-java
provided
に変更し、手動でサーバーに依存関係をコピーすることをお勧めします(どのように明確ではありません)。
しかし、私は配備の依存関係(スコープprovided
)を除外して手動で追加する必要があるのはわかりませんが、矛盾していませんか?
Maven documentationを読んだ後は、実行環境が依存関係を必要としているように感じるので、compile
のスコープが最適です。
私はこれらのことを理解しようとしていますが、私はむしろ魔法の修正よりも説明をしたいと思います。
構成:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
データベースプロパティ:
URL = jdbc:mysql://127.0.0.1:3306/XXX-db?zeroDateTimeBehavior=convertToNull
USERBD = XXX
PASSWORDBD = XXX
DRIVER = com.mysql.jdbc.Driver
ロード
プロパティ:
static {
try {
Properties databaseProperties = new Properties();
InputStream inputStream = DatabaseConnection.class.getClassLoader()
.getResourceAsStream(PROPERTIES_FILE);
if (inputStream != null) {
databaseProperties.load(inputStream);
} else {
throw new FileNotFoundException(
"property file '" + PROPERTIES_FILE + "' not found in the classpath");
}
Class.forName(databaseProperties.getProperty("DRIVER"));
USERBD = databaseProperties.getProperty("USERBD");
PASSWORDBD = databaseProperties.getProperty("PASSWORDBD");
URL = databaseProperties.getProperty("URL");
} catch (ClassNotFoundException | IOException e) {
e.printStackTrace();
}
}
アプリケーションサーバーがTomcat IIRCでデフォルトではそうでない場合を除いて、誰かがWARにJDBCドライバを埋め込まないように推奨する理由はわかりません。デフォルトのスコープ( 'compile')で動作するなら、そのまま残しておきます。 –
Tomcatには接続プールが用意されています。これは、すべての深刻なwebアプリケーションに必須のものです。したがって、あなたの戦争で接続プールを持っていない場合は、提供されているように依存関係をマークし、Tomcatのライブラリに追加して、tomcatのドキュメントで説明されているようにTomcat接続プールを設定するのが良いでしょう。もう1つの利点は、接続プールの設定を調整するために戦争を再構築する必要がないことです。しかし、あなたの戦争で適切に設定された接続プールを持っていれば、それも問題ありません。 –