2014-11-05 85 views
2

免责声明:当我的代码在家中另一台PC上时,我可能在今天晚上无法访问到这个问题。我现在正在写这个问题,而我记忆犹新,所以对于任何错误都表示歉意。Tomcat 7/Tomee/Java Datasource

问题:我正在写一个连接到MySQL数据库的Tomee的web应用程序。我已经成功地创建了Tomee一个数据源,如下图所示:

<Resource auth="Container" 
      driverClassName="com.mysql.jdbc.Driver" 
      maxActive="100" 
      maxIdle="30" 
      maxWait="10000" 
      name="jdbc/TestDB" 
      type="javax.sql.DataSource" 
      url="jdbc:mysql://localhost:3306/java" 
      username="u5ser" 
      password="p4ssword"/> 

这工作得很好,但不依赖此数据源中的任何配置/我在部署我的代码的Tomcat/Tomee的所有实例最终我我希望能够在Glassfish或Weblogic或其他Tomcat's/Tomee的其他容器中部署此代码。 AKA我希望数据源出现在War文件中。

记住这一点,有没有一种方法可以在Java中编写我自己的数据源(MyDataSource.class),并将其捆绑到WAR文件中并使用WebListener对其进行初始化。

本质上:我想知道如何将XML编码到我自己的DataSource中(即使这不是推荐的方式 - 我只是在试验)。

此外,一个考虑因素是我想编写代码以便我可以从属性文件中读取数据,并使数据源的各个方面可配置。

我在Web上发现了几个例子,但它是maxActive,maxIdle,maxWait位,所以我可以在代码中创建连接池。这些似乎不见了。

任何帮助表示赞赏。

回答

1

您可以在您的WAR Apache Commons DBCPApache Commons Pool创建自己的数据源:

package com.company.app.util; 

import java.sql.Connection; 
import java.sql.SQLException; 
import javax.sql.DataSource; 
import org.apache.commons.dbcp.BasicDataSource; 

public final class ConnectionProvider { 
    private static final DataSource DATA_SOURCE; 
    static { 
     try { 
      BasicDataSource dataSource = new BasicDataSource(); 
      dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
      dataSource.setUrl("jdbc:mysql://localhost/test"); 
      dataSource.setUsername("root"); 
      dataSource.setPassword(""); 
      dataSource.setValidationQuery("select now()"); 
      dataSource.setTestOnBorrow(true); 
      dataSource.setRemoveAbandoned(true); 
      DATA_SOURCE = dataSource; 
     } catch (Throwable t) { 
      throw new ExceptionInInitializerError(t); 
     } 
    } 
    public static Connection getConnection() throws SQLException { 
     return DATA_SOURCE.getConnection(); 
    } 
} 

如果你想使用一个属性文件,请参阅Reading Properties file in Java并在上面的代码替换性能

+0

我喜欢这个我以后会给这个(或者只要我可以在家里的电脑上) – thonnor 2014-11-05 16:15:04

+0

我会接受这个作为最好的答案,因为它工作到一个点,是我的东西可以在另一个项目中使用,讽刺呃?然而,这已经提出了另一个问题 - 我将在这里使用SO,Google和通常的嫌疑人之前研究这个问题。谢谢您的帮助。 – thonnor 2014-11-06 09:24:22

1

您可以在Java中使用MySQL使用JDBC DriverManager接口。

您需要导入

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 

try { 
    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/java?user=u5ser&password=p4ssword"); 
} catch (SQLException ex) { 
    // handle any errors 
    System.out.println("SQLException Message: " + ex.getMessage()); 
    System.out.println("SQLState: " + ex.getSQLState()); 
} 

正如你说,这是实验性的:-)你可以做到这一点。

+0

很好的答案。这会允许连接池吗? – thonnor 2014-11-05 16:12:08

0

你看@DataSourceDefinition或其xml等效(在web.xml中)?

+0

我没有害怕。我最终尝试了一些东西,并且使用定义的数据源来创建META-INF/context.xml。它工作正常(反正在tomcat上)。我需要重新思考Weblogic/Glassfish,但这还有一段路要走。 – thonnor 2014-11-11 19:56:18