特定于Java环境的属性WITHOUT Spring

时间:2016-06-16 14:41:24

标签: java groovy properties

Spring使得设置应用程序属性非常简单......但是如果没有Spring,你会怎么做呢?

我需要将一个Java / Groovy应用程序部署到一个使用Spring的服务器是不可能的......而且我也没有自由安装像Redis这样的东西。我正在考虑的一个选择是在其他地方设置Spring Cloud Config Server,让我的应用程序使用配置服务器中的属性。麻烦的是,现在这对我的项目来说有点过分了。

有没有人可以建议一种方法来做好旧的普通Java? :)

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的基本示例,但您可以根据需要进行修改:

<强> PropertyConfigurator.java

public class PropertiesConfigurator
{

    Properties properties = new Properties();

    String configInputPath = null;

    InputStream configInputStream = null;



    public PropertiesConfigurator(String configInputPath)
    {
        this.configInputPath = configInputPath;
    }



    public PropertiesConfigurator load() throws IOException, PropertyException
    {
        try
        {

            this.configInputStream = new FileInputStream(this.configInputPath);

            // load a properties file
            this.properties.load(this.configInputStream);

            validate();

        }
        catch (IOException ex)
        {
            System.out.println("Failed load properties file: " + this.configInputPath);
            throw ex;
        }
        catch (PropertyException ex)
        {
            System.out.println("One or more properties are empty");
            throw ex;
        }
        finally
        {
            if (this.configInputStream != null)
            {
                try
                {
                    this.configInputStream.close();
                }
                catch (IOException ex)
                {
                    System.out.println("Failed to close input stream");
                    throw ex;
                }
            }
        }

        return this;
    }



    private void validate() throws PropertyException
    {
        Enumeration<?> e = this.properties.propertyNames();
        while (e.hasMoreElements())
        {
            String key = (String) e.nextElement();
            String value = this.properties.getProperty(key);

            if (value.isEmpty())
            {
                System.out.println(String.format("Property %s is empty!", key));
                throw new PropertyException("One or more properties are empty");
            }
        }
    }



    public String getProperty(String key)
    {
        return this.properties.getProperty(key);
    }



    @Override
    public boolean equals(Object o)
    {
        if (this == o)
            return true;
        if (!(o instanceof PropertiesConfigurator))
            return false;

        PropertiesConfigurator that = (PropertiesConfigurator) o;

        if (properties != null ? !properties.equals(that.properties) : that.properties != null)
            return false;
        if (configInputPath != null ? !configInputPath.equals(that.configInputPath) : that.configInputPath != null)
            return false;
        return configInputStream != null ?
                configInputStream.equals(that.configInputStream) :
                that.configInputStream == null;

    }



    @Override
    public int hashCode()
    {
        int result = properties != null ? properties.hashCode() : 0;
        result = 31 * result + (configInputPath != null ? configInputPath.hashCode() : 0);
        result = 31 * result + (configInputStream != null ? configInputStream.hashCode() : 0);
        return result;
    }
}

<强> PropertyException.java

public class PropertyException extends Exception
{
    public PropertyException()
    {
    }



    public PropertyException(String message)
    {
        super(message);
    }



    public PropertyException(String message, Throwable throwable)
    {
        super(message, throwable);
    }
}

<强> MainRunner.java

public class MainRunner
{

    public static void main(String[] args)
    {
        try
        {
            String configFilePath = "application.properties";
            PropertiesConfigurator propertiesConfigurator = new PropertiesConfigurator(configFilePath).load();

            String prop1 = propertiesConfigurator.getProperty("keyprop1");

            // Do whatever you want with prop1
            // ...
        }

        catch (PropertyException ex)
        {
            System.out.println("Failed to load properties");
            System.exit(1);
        }

        catch (Exception ex)
        {
            System.out.println("Error in main application");
            System.exit(1);
        }
    }
}

application.properties示例

keyprop1=value1
keyprop2=value2

同样,它非常基础,你绝对应该改进这个代码并添加你的逻辑,验证等。

答案 1 :(得分:0)

看看http://constretto.org。这是易于使用的配置框架。