Java SQL数据源资源配置

时间:2014-06-29 15:07:06

标签: java maven-jetty-plugin

在Java Spring中,我试图将我的数据库设置保留在主应用程序之外,以便可以轻松地在其他服务器上配置它。我正在使用Tomcat 7作为我的生产服务器和Jetty服务器(jetty-maven-plugin版本8.1.14.v20131031)进行开发。

我遇到的主要问题是我无法使用相同的类(javax.sql.DataSource)将工作的Tomcat 7配置转换为Jetty。我从这个课开始,反对一个更强大的课程,以便我从尽可能基本的东西开始。

如果这是两台服务器之间没有直接翻译的情况,或者这只是不好的做法,我正在寻找一个好的做法或标准。

例如,this answer是使用不同类的替代配置,并与Jetty一起使用。 (但它没有回答为什么基本的DataSource类与Tomcat一起使用而不与Jetty一起使用。)

我在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>

jetty-maven-plugin 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中运行良好。

对于Jetty,我正在使用具有以下配置的jetty-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 个答案:

答案 0 :(得分:1)

添加此

 <Arg></Arg>

上面

<Arg>mysql-dataSource</Arg>

首先,“Arg”是范围,没有它,其余的参数都不合适,可能会导致你的问题。

了解更多信息Jetty/Howto/Configure JNDI Datasource

修改:

您是否为特定版本的Jetty添加了范围provided