在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