2014-06-29 77 views
-1

在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">... 
+1

我已經重寫了這個問題,以便它更專注於我真正要問的問題。也就是說,Tomcat和Jetty之間的一對一翻譯配置。答案表明與它使用不同的類相同(EnvEntry vs Resource,MysqlConnectionPoolDataSource vs DataSource)。 – Shroder

回答

1

添加此

<Arg></Arg> 

以上

<Arg>mysql-dataSource</Arg> 

作爲第一個「精氨酸」的範圍,沒有它,其餘的論點是不正確的,可能會導致你的問題。

欲瞭解更多信息Jetty/Howto/Configure JNDI Datasource

編輯:

你有沒有添加範圍provided用於碼頭的具體版本?

+0

您是否指「useProvidedScope」?我在加入失蹤的之後,用True和False嘗試了它。我要用我的POM配置更新我的問題。 – Shroder