好吧,我一直試圖讓它工作太久。我真的需要一些我的情況的輸入。我已經閱讀了很多關於此問題的不同問題,並嘗試了多種解決方案,但似乎沒有任何工作適合我。Tomcat8 ClassNotFoundException BasicDataSourceFactory
我想在我的AWS環境上設置數據庫池。環境配置爲: 64位Linux的亞馬遜2017.03 V2.6.1運行Tomcat Java的8 8
的問題我運行到是我得到這個異常:
javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory]
我的設立是這樣的:
我把第一個context.xml文件放在WEB-INF/conf/context.xml下的.war文件中,首先這是正確的位置?
<Context>
<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"
maxTotal="20"
maxIdle="10"
maxWaitMillis="10000"
username="username"
password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://database-url.example"/>
</Context>
在這裏,我試圖既提供出廠參數不同的值,如
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
我自己也嘗試下添加兩個org.apache.tomcat.dbcp
庫,也是我的.war WEB-INF/lib目錄/
的我在我的.war web.xml中在WEB-INF/web.xml中
<web-app>
. . .
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
然後在我的代碼我這樣做
public class Database {
private static DataSource dataSource;
static {
try {
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
dataSource = (DataSource) envCtx.lookup("jdbc/TestDB");
} catch(NamingException e) {
e.printStackTrace();
}
}
public static Connection getPoolConnection() {
try {
return dataSource.getConnection();
} catch(SQLException e) {
e.printStackTrace();
}
return null;
}
}
問題可能歸結爲不存在在正確的地方圖書館,我看了一下,你需要將它添加到CATALINA_HOME/lib中,這是不是與我添加庫相同的位置?我如何在我的AWS環境中將庫添加到此文件夾?
是否有任何其他更改需要製作或添加其他庫?
我注意到,即使我在.war WEB-INF/lib文件夾中添加了庫,並添加了factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
或像factory="org.apache.tomcat.dbcp.dbcp2.BasicDataSourceFactory"
這樣的一些東西,它仍然無法正常工作。即使我將工廠設置爲DataSourceFactory
,但我仍然會得到與BasicDataSourceFactory
無法找到的相同的例外情況。
我想我需要一些清楚的解釋,哪些文件或庫完全放在哪個文件夾中。