如何使用Tomcat从属性文件中检索数据库属性以便在多台机器上工作[重复]

Posted

技术标签:

【中文标题】如何使用Tomcat从属性文件中检索数据库属性以便在多台机器上工作[重复]【英文标题】:How to retrieve Database properties from Properties file using Tomcat in order to work on multiple machines [duplicate] 【发布时间】:2019-12-23 18:12:58 【问题描述】:

我正在使用 Maven 和 Java servlet 开发一个 webapp。我正在尝试通过从属性文件中检索其凭据来建立与本地 Postgres 数据库的连接,因为我不想对它们进行硬编码。为此,我在“getProperties”通用方法中使用FileInputStream。问题是我使用的是 Tomcat 服务器,所以项目从 Tomcat 目录运行,我无法设置它,以便我的程序员同事可以在他们自己的机器上运行我的应用程序,而无需对目录进行硬编码。最终目标是只需要更改文件本身而不需要更改代码。

所以我有一个这样的属性文件:

port = localhost
bdname = clothingdb
user = jmbs
pw = 123

我试图像这样检索它们:

    String port = getProperties("port");
    String bdname = getProperties("bdname");
    String user = getProperties("user");
    String pw = getProperties("pw");

使用这种方法:

public String getProperties(String propriedade)

        String parametro = null;

        try (InputStream input = new FileInputStream("svlocal.properties")) 

            Properties prop = new Properties();

            // load a properties file
            prop.load(input);

            // get the property value and print it out
            parametro = prop.getProperty(propriedade);


         catch (IOException ex) 
            ex.printStackTrace();
        
        return parametro;
    

为此,我收到“找不到文件”错误,因为项目从 tomcat/bin 目录运行,而不是从 NetBeansProjects/bookstore/ 我需要属性文件的目录。

我的实际问题是,我如何设置属性文件,这样当我将我的项目发送给其他人时,他只需运行它并更改属性文件上的凭据即可访问他自己的本地数据库,而无需更改目录或对其进行硬编码 getProperties() 方法?提前致谢。

【问题讨论】:

【参考方案1】:

您可以将文件添加到类路径中,然后按如下方式加载它,

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); InputStream input = classLoader.getResourceAsStream("src/main/resources/svlocal.properties")

【讨论】:

您能否更详细地解释一下我如何使用该方法以及具体在哪里?谢谢【参考方案2】:

好的,所以,我能够使用 javaadict 的建议解决问题,但有一点不同。我在 src/main/resources 中创建了一个新目录并将属性文件添加到其中。然后我使用了以下方法:

public String getProperties(String propriedade)

        String parametro = null;
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();

        try (InputStream input = classLoader.getResourceAsStream("svlocal.properties")) 

            Properties prop = new Properties();

            // load a properties file
            prop.load(input);

            // get the property value and print it out
            parametro = prop.getProperty(propriedade);


         catch (IOException ex) 
            ex.printStackTrace();
        
        return parametro;
    

似乎因为我使用 maven,它可以识别 src/main/resources 中的资源文件夹,并且我能够通过在 getResourceAsSteam 方法中使用“svlocal.properties”来加载文件。

感谢 javaaddict 的宝贵建议。

【讨论】:

以上是关于如何使用Tomcat从属性文件中检索数据库属性以便在多台机器上工作[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在属性文件中指定值,以便可以使用 ResourceBundle#getStringArray 检索它们?

如何使用检索到的核心数据对象

如何使用外部化的属性文件在 Tomcat 中执行 JNDI

如何在tomcat连接中定义模式属性

在 tomcat 9 上部署 Spring Boot Web 应用程序时,出现错误“无法检索系统属性'spring.xml.ignore'”

通过 WPF 应用程序从 Access (.accdb) 中检索查询、表单和报表属性