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

标签 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时,如果我想快速更改为另一个数据库......我基本上不能! (并非不需要将这些行更改为相应的数据库并生成一个全新的.war)。

我想要一种快速更改为不同数据库的方法,显然我需要使用的是 JNDI 上下文和 DataSource 并创建一个 Resource 这将是数据库连接...然后,如果我想更改数据库,只需更改资源的参数。

问题是我找不到适合我的问题的工作教程......我已经尝试了几个小时。我得到的最多的一点是出现 NoInitialContextException,但我在网上搜索了此错误,但似乎找不到正确的解释。

如果有人能阐明我的问题,我将不胜感激。

PS:抱歉英语或格式不好。

最佳答案

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

关于java - 如何将我的数据库连接放在 .war 文件之外?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918711/

相关文章:

java - 每次数据库退回时应用程序服务器是否都需要退回?

java - 频繁的对象属性访问是否会产生相关成本?

apache - Tomcat 网址前缀

java - Tomcat、JBoss 和 Glassfish 有什么区别?

java - InitialContext 工厂错误

java - 连接池还是数据源?我应该把哪个放在 JNDI 中?

java - Android 11 打开失败 : EACCES (Permission denied)

java - 当用户在 Spring Security 中被禁用时,如何向客户端显示用户禁用消息

java - 创建克隆自定义对象

tomcat - 使用代理绕过登录屏幕以进行前端本地开发