Java 如何允许用户在servlet/JSP项目中配置数据库连接参数?

Java 如何允许用户在servlet/JSP项目中配置数据库连接参数?,java,database,servlets,jdbc,design-patterns,Java,Database,Servlets,Jdbc,Design Patterns,我正在创建一个简单的基于servlet/JSP的web应用程序,它连接到一个MySQL数据库。之前我创建了一个ConnectionParams类和一个DBConnection类。ConnectionParams类包含硬编码的DB主机、用户名和密码。DBConnection基于它创建一个JDBC连接,然后用于数据库操作 public class DBConnector extends HttpServlet { Connection conn; static DBConnectio

我正在创建一个简单的基于servlet/JSP的web应用程序,它连接到一个MySQL数据库。之前我创建了一个ConnectionParams类和一个DBConnection类。ConnectionParams类包含硬编码的DB主机、用户名和密码。DBConnection基于它创建一个JDBC连接,然后用于数据库操作

public class DBConnector extends HttpServlet {
    Connection conn;
    static DBConnectionProperties dbProps;

    public DBConnector() {
        try {
            BufferedReader br = new BufferedReader(new FileReader(System.getProperty("java.io.tmpdir")+"\\zlmondbcon.txt"));
            String line = br.readLine();
            dbProps = new DBConnectionProperties(line);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public Connection getConnection() {
        return conn;
    }

    public Connection connect() throws SQLException, ClassNotFoundException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        conn = DriverManager.getConnection(dbProps.getConnectionString(), dbProps.getUser(), dbProps.getPass());
        return conn;
    }

    ...
    ...
我在将其部署到一个测试环境时意识到了这个问题,该环境有一个单独的DB,DBA可能会更改用户名/密码等。因此,我创建了一个单独的文本文件,其中包含以下详细信息:WEB-INF\dbConfig.txt。其中包含以下信息:

dbName=mydbschema
dbUser=myuser
dbPass=mypass
dbType=mysql
每次服务器重新启动时,用户都必须在\Webapps\myproject\WEB-INF中编辑该文件。每次主servlet启动时,它都会读取文件并存储一个全局ConnectionParams对象。我可以看出,这绝对不是最好的做法

我正在寻找一个更健壮的解决方案


如果您认为问题的措辞不恰当,请对其进行编辑。如果需要添加更多详细信息,请添加注释。

一个选项是从war文件中提取配置文件,并通过系统正确指定文件的路径和名称。这将使编辑和维护配置的任务变得简单。

我建议使用连接池,并为正在使用的每个数据库准备一个连接。然后让用户选择所需的连接。因此,当用户名或密码更改或创建额外的数据库时,您仍然需要执行一些手动输入,但连接是由容器处理的。当通过webapplication处理连接时,必须非常注意关闭连接,以避免有空闲的DB连接。

可以发布数据库连接类吗?因此,我们可以看到如何从dbConfig.txt获取详细信息