如何获得DataSource?

时间:2013-07-24 07:51:18

标签: java database exception jdbc connection

我不确定如何获得DataSource个对象。我能够使用DriverManager方法获取与在localhost上运行的SQL数据库的连接,但每次我尝试使用DataSource方法执行此操作时,我最终会获得异常(主要用于命名) )。

我想知道的是:

  1. 是否可以为本地托管数据库获取DataSource对象?
  2. 是否需要发布DataSource类,或者它是否就像DriverManager只是在没有新类创建的情况下获得连接?
  3. 你能展示一个例子吗?

1 个答案:

答案 0 :(得分:6)

DataSource允许主要从连接池获取JDBC连接。 DataSource对象表示特定的DBMS或某些其他数据源,例如文件。如果公司使用多个数据源,它将为每个数据源部署单独的DataSource对象。 DataSource接口由驱动程序供应商实现。您外部化数据库连接属性文件并使用JNDI获取对象。使用Datasource,您只需要知道JNDI名称。应用程序服务器关心细节。

它可以通过三种不同的方式实现:

  1. 基本DataSource实现生成标准的Connection对象,这些对象未在分布式事务中合并或使用。
  2. 支持连接池的DataSource实现会生成参与连接池的Connection对象,即可以回收的连接。
  3. 支持分布式事务的DataSource实现生成可在分布式事务中使用的Connection对象,即访问两个或多个DBMS服务器的事务。
  4. 就像,在Spring中,您可以在XML文件中配置数据源,然后(1)将其注入您的bean,(2)从ApplicationContext获取它。

    DataSource ds = (DataSource) ApplicationContextProvider.
                                getApplicationContext().getBean("myDataSource");
    Connection c = ds.getConnection();
    

    建议阅读:

    1. Connecting with DataSource Objects
    2. Why do we use a DataSource instead of a DriverManager?
    3. Data access with JDBC
    4. How to retrieve DB connection using DataSource without JNDI?
    5. Best way to manage DB connections without JNDI