在Java Spring中,我试图将我的数据库设置保留在主应用程序之外,以便可以用最少的努力在其他服务器上配置它。我为我的生产服务器和Jetty服务器(jetty-maven-plugin version 8.1.14.v20131031)使用Tomcat 7进行开发。Java SQL数据源资源配置
我遇到的主要问题是我无法使用相同的类(javax.sql.DataSource)将工作的Tomcat 7配置转换为Jetty。我从这个课程开始,反对一个更强大的课程,以便我从尽可能基本的东西入手。
如果这是两台服务器之间没有直接转换的情况,或者这只是一个糟糕的做法,我正在寻找什么是一种好的做法或标准。
例如,this answer是使用不同类的替代配置,并且可以与Jetty一起使用。 (然而,它没有回答为什么基本数据源类的工作与Tomcat和不与码头)
我在server.xml中的资源入口,像这样:
<Context path="/" docBase="/var/lib/tomcat7/webapps/myapp" reloadable="true">
<Resource name="mysql-dataSource" auth="Container" type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbname"
username="dbuser"
password="dbuser" />
</Context>
码头 - Maven的插件POM条目:
...
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.14.v20131031</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
</dependencies>
<configuration>
<!-- <useProvidedScope>?</useProvidedScope> -->
<webApp>
<jettyEnvXml>${basedir}/jetty-env.xml</jettyEnvXml>
</webApp>
</configuration>
</plugin>
...
这在Tomcat7中正常工作。
对于码头,我使用码头-env.xml具有以下配置:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.eclipse.org/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="ds" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg>mysql-dataSource</Arg>
<Arg>
<New class="javax.sql.DataSource">
<Set name="driverClassName">com.mysql.jdbc.Driver</Set>
<Set name="url">jdbc:mysql://localhost:3306/dbname</Set>
<Set name="username">dbuser</Set>
<Set name="password">dbuser</Set>
</New>
</Arg>
</New>
</Configure>
有了,我得到这个错误:
java.lang.IllegalStateException: No Constructor: <New class="javax.sql.DataSource">...
我已经重写了这个问题,以便它更专注于我真正要问的问题。也就是说,Tomcat和Jetty之间的一对一翻译配置。答案表明与它使用不同的类相同(EnvEntry vs Resource,MysqlConnectionPoolDataSource vs DataSource)。 – Shroder