【问题标题】:How to put my DB connection outside the .war file?如何将我的数据库连接放在 .war 文件之外?
【发布时间】:2014-11-13 03:37:14
【问题描述】:

我有一个在 Apache Tomcat 7 上运行的 Java 网络应用程序,并且在某些时候会与数据库进行以下连接:

    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:抱歉英文不好或格式不好。

【问题讨论】:

    标签: java tomcat datasource jndi


    【解决方案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

    【讨论】:

    • 甚至可以使用 reset() 方法包装属性查找,因此无需重新启动应用程序。
    • @Jan Nielsen 我不想使用 Spring Data,因为我需要它来快速修复问我这个问题的“客户”的“新功能”。我不想听起来很愚蠢,但我在某些时候使用过这个:codejava.net/servers/tomcat/… 这是我想要的,但我似乎做不到。
    • 这似乎很合理,@Vitz - 添加您的所有代码,以便我们帮助您发现错误...
    • @JanNielsen 问题已回答,我只需要更改 Apache Tomcat 中的 server.xml 并在我的 Web 项目中的 web.xml 中添加几行。感谢您的时间和回答! PS:我在错误的 .xml 文件中放了一些代码,这是我的问题。
    【解决方案2】:

    在您的服务器中创建一个数据源。这是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”。

    【讨论】:

    • 你提供的链接救了我!简单而直接。谢谢。问题已回答。
    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 2019-10-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多