用maven构建后的.properties文件的路径

时间:2018-07-16 09:29:33

标签: java maven spring-boot

然后我的问题是我的应用程序中使用了几个 .properties 文件,因此在我的src/main/resources中有我的application.properties,在我的src/main/resources/properties中有其他 .properties 文件(messages.propeties是其中之一)。在我的应用程序中,我使用src / main / resources / propeties路径来调用我的messages.properties文件,到目前为止,所有这些文件都可以工作。这在我制作mvn clean install并将我的 war 部署在tomcat中时,我的应用程序似乎可以正常工作,但是当它尝试检索message.properties文件时,我遇到了错误,例如"the specified path can not be found"。如何确保在构建并部署我的战争之后,我的应用知道我的资源文件在哪里?

我的代码读取属性文件:

Properties properties = new Properties();
String valueBundle = null;
FileInputStream input = new FileInputStream("src\\main\\resources\\properties\\messages.properties");
        try {
            properties.load(input);
            valueBundle = properties.getProperty(keyBundle);
        }

        finally {
            input.close();
        }

2 个答案:

答案 0 :(得分:1)

不要对路径进行硬编码。

使用Classpath资源来实现此目的,因为类加载器实质上是资源名称与其在磁盘上的实际位置之间的抽象层

public static String getMessageProperty(String code) {
    Properties prop = new Properties();
    String value = "";
    try {

        InputStream inputStream = this.class.getClassLoader().getResourceAsStream("message.properties");
        prop.load(inputStream);
        value = prop.getProperty(code);
        inputStream.close();

    } catch (IOException e) {

        e.printStackTrace();
    }

    return value;
}

答案 1 :(得分:0)

使用下面的类来这样做:

import static java.util.Objects.nonNull;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


/** This class is responsible for loading configuration from properties files.
 * @author jaikant
 *
 */
public class Config {

    // to make this singleton
        private Config() {

        }

        private static final String BASE_LOCATION = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "resources"
                                                    + File.separator + "properties" + File.separator;
        private static final Properties PROPERTIES = new Properties();

        static {
            loadPropertiesFile(BASE_LOCATION + "abc.properties");
            loadPropertiesFile(BASE_LOCATION + "def.properties");

            // you can have any number of properties file loaded here
        }   


        /**
         * It will load properties file
         * 
         * @param filePath
         */
        private static void loadPropertiesFile(String filePath) {
            try {
                InputStream input = new FileInputStream(filePath);
                PROPERTIES.load(input);
                if (nonNull(input)) {
                    input.close();
                }
            } catch (IOException e) {
                System.out.println("!!!! Exception while loading properties file :  " +  e.getMessage());
            }
        }

        /**
         * It will give the property value present in properties file.
         * 
         * @param propertyName
         * @return property value
         */
        public static String getProperty(String propertyName) {

            return PROPERTIES.getProperty(propertyName);
        }

}

它将在整个项目中为您提供任意数量的属性文件。
希望对您有帮助。