如何将我的数据库连接放在.war文件之外?

时间:2014-09-18 17:18:19

标签: java tomcat datasource jndi

我有一个使用Java的Web应用程序,它在Apache Tomcat 7上运行,并且在某些时候将以下连接到数据库中:

    DBConnection database = new DBConnection(
       "user", "password", "jdbc:sqlserver://localhost:1433"
       );

    database.connect();

    Connection conn = database.getConn();

DBConnection是我创建的一个类,它有一些关于数据库的代码,没什么特别的(它有JDBC驱动程序和所有)。我们在这里看到的是从Java到SQLServer DB的工作连接。

我的问题是当我生成.war时,如果我想快速更改为另一个数据库...我基本上不能! (并非必须将这些行更改为相应的DB并生成一个全新的.war)。

我希望快速更改为不同的数据库,显然我需要使用JNDI上下文与DataSource,并创建一个Resource作为数据库连接。 ..然后,如果我想更改数据库,只需更改Resource的参数。

问题是我无法找到适合我的问题的工作教程......而且我已经尝试了几个小时。我得到的最大点是NoInitialContextException,但我在网上搜索了这个错误,我似乎无法找到正确的解释。

如果有人能够解释我的问题,我将不胜感激。

PS:抱歉英文不好或格式化。

2 个答案:

答案 0 :(得分:1)

将连接信息放在属性文件中,并使用对属性的引用替换硬编码值。更好的方法是使用所有这些的框架,如Spring Data:

http://spring.io/guides/gs/accessing-data-jpa/

本教程介绍如何在context.xml文件中执行此操作,您可以将Apache Tomcat配置为重新读取:

http://www.codejava.net/frameworks/spring/configuring-spring-mvc-jdbctemplate-with-jndi-data-source-in-tomcat

答案 1 :(得分:1)

在服务器中创建数据源。以下是steps

您将使用以下JNDI查找来获得连接:

private DataSource getDataSource (String dataSourceLocation) throws NamingException
  {
    // Get a context for the JNDI look up
    Context ctx = new InitialContext();
    Context envContext = (Context) ctx.lookup("java:/comp/env");

    // Look up a data source
    javax.sql.DataSource ds
      = (javax.sql.DataSource) envContext.lookup (dataSourceLocation); 

    return ds;
  }

  private Connection getConnection (DataSource ds) throws SQLException
  {
    Connection conn = null;
    // Get a connection object
    conn = ds.getConnection();

    return conn;
  }

注意:dataSouceLocation将是“jdbc / UCPPool”。