2014-06-29 168 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