Edo*_*Edo 28 ubuntu tomcat datasource jdbc tomcat7
我正在尝试在Ubuntu 12.X下的Tomcat 7中设置JDBC DataSource,因此我将以下内容添加到context.xml文件中:
<Resource name="jdbc/myDS" auth="Container" type="javax.sql.DataSource"
maxActive="5" maxIdle="2" maxWait="5000"
driverClassName="org.postgresql.Driver" username="usr" password="***" url="jdbc:postgresql://localhost:5432/db" />
Run Code Online (Sandbox Code Playgroud)
显然,使用正确且经过测试的数据库用户ID和密码.当我重新启动Tomcat时,我收到此错误:
Feb 05, 2013 1:10:01 PM org.apache.catalina.core.NamingContextListener addResource
WARNING: Failed to register in JMX: javax.naming.NamingException: Could not create resource factory instance [Root exception is java.lang.ClassNotFoundException: org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory]
Run Code Online (Sandbox Code Playgroud)
我用google搜索,发现JDBC驱动程序必须复制到$ CATALINA_HOME/lib文件夹,所以我将postgresql-9.2-1000.jdbc4.jar复制到/ usr/share/tomcat7/lib,但它没有帮助.我尝试将文件复制到其他位置,结果相同.
另一种尝试是将/ usr/share/tomcat7/lib中的tomcat-dbcp.jar符号链接从../../java/tomcat-dbcp-7.0.30.jar更改为../../java/tomcat- dbcp.jar.唯一的变化是我只得到一个警告而不是四个,但数据源也不起作用.
Java版本:
jdoe@sever:~$ java -version
java version "1.7.0_09"
OpenJDK Runtime Environment (IcedTea7 2.3.4) (7u9-2.3.4-0ubuntu1.12.10.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)
Run Code Online (Sandbox Code Playgroud)
任何提示,都非常欢迎.
干杯.
amr*_*mra 36
该库tomcat-dbcp-7.0.30.jar从库已损坏.
替换为:
sudo wget -O /usr/share/java/tomcat-dbcp-7.0.30.jar http://search.maven.org/remotecontent?filepath=org/apache/tomcat/tomcat-dbcp/7.0.30/tomcat-dbcp-7.0.30.jar
Ste*_*eve 25
原因是Tomcat7的Ubuntu构建/包过程中的问题.如果我正确理解了这个问题,Apache会从二进制文件构建tomcat-dbcp.jar,而Ubuntu只能从源代码构建软件包.Ubuntu项目最终需要更改Java包名称,这往往会破坏我们的穷人用户.可以在Ubuntu问题列表中找到血腥的详细信息.
我找到的解决方案是在定义资源时命名数据源工厂.在一种情况下,我有一个META-INF/context.xml文件,其中包含:
<Resource name="jdbc/myDataSource"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/myDatabase"
username="username" password="password"
validationQuery="SELECT COUNT(*) FROM MY_TABLE"
factory="org.apache.commons.dbcp.BasicDataSourceFactory" />
Run Code Online (Sandbox Code Playgroud)
关键元素是"工厂"声明,它会覆盖内置默认值.
在我们的生产机器上,资源在server.xml文件的GlobalNamingResources元素中定义.只在Ubuntu系统上需要指定工厂.
| 归档时间: |
|
| 查看次数: |
49968 次 |
| 最近记录: |