【问题标题】:Java SQL DataSource Resource ConfigurationJava SQL 数据源资源配置
【发布时间】:2014-06-29 15:07:05
【问题描述】:

在 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 中有一个 Resource 条目,如下所示:

<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">...

【问题讨论】:

  • 我已经改写了这个问题,以便它更专注于我真正要问的问题。也就是说,Tomcat 和 Jetty 配置之间的一对一转换。答案表明与使用不同的类(EnvEntry vs Resource,MysqlConnectionPoolDataSource vs DataSource)相同。

标签: java maven-jetty-plugin


【解决方案1】:

添加这个

 <Arg></Arg>

上面

<Arg>mysql-dataSource</Arg>

因为第一个“Arg”是范围,没有它,你的其余论点就不合适了,可能会导致你的问题。

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

编辑:

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

【讨论】:

  • 您指的是“useProvidedScope”吗?在添加缺少的 后,我尝试了 True 和 False ,但没​​有运气。我将使用我的 POM 配置更新我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 2017-09-13
相关资源
最近更新 更多