如何在Java中加载应用程序中常用的全局设置

时间:2014-04-20 07:23:16

标签: java hibernate caching ehcache

1)在我的应用程序中,我们有一个表存储了一些设置细节,这些细节大量用于每个功能。基本上在这个表中设置了一些条件,这些条件都经过检查。

现在我们正在做的是不时地调用DB来获取细节并检查条件。这导致了大量的DB调用和重复调用相同的条件。有很多条件记录在这个表中。我们需要改变它以使其表现更好。

2)在我之前的项目中,我也有相同的要求,我们有一个配置表,配置了这样的设置,我们实现它就像在启动应用程序时从表中加载配置并将它们存储在System.setProperty(name ,值)..然后使用System.getProperty(name)来检索它。如果任何设置被更改,我们在其System属性中更新它。这就像一个魅力。

然而,在我目前的情况下(上面的第1点),我不认为我的流行方式是最好的方法,因为表中存在大量列的记录。 任何人都可以建议如何在Java中实现这种行为?其中一些我能想到的是

1)像我解释的那样使用System.setProperty。 2)使用像EHCache这样的缓存 - 独立或使用hibernate(因为我们使用的是休眠)。

是否有更好的方法来存储应用程序的全局设置以避免数据库调用?

1 个答案:

答案 0 :(得分:0)

使用Ehcache的最佳方式(但我从未实现过)。并且您不应该使用System属性,它可能会导致与其他系统属性冲突。 在我的情况下我是如何做到的,我创建了一个bean类,它具有像autoid,name,address,mobile这样的yor table列属性。

public Map<Integer, PersonBean> getTag()
{
     Map<Integer, PersonBean> map= new HashMap<Integer, PersonBean>();
     Connection conn =getConnection();
     Statement st=null;
     ResultSet rs=null;
    try
    {
        String sql = "select autoid,name, address, mobile from person";//person table
         st =  conn.createStatement();


         rs = st.executeQuery(sql);
        while(rs.next()){
            int tagid=rs.getInt("autoid");
            String name=rs.getString("name");
            String address=rs.getString("address");
            String mobile=rs.getString("mobile");
            PersonBean tagdeatilbean= new PersonBean(auotoid,name, address, mobile);
            map.put(rs.getInt("autoid"), tagdeatilbean);
        }
        return map;
    }

     catch (SQLException e) {

    }
    finally
    {

    }
}

和bean类

public class PersonBean 
{
    private int autoid;
    private String name;
    private String address;
    private String mobile;
    public PersonBean(int autoid, String name, String address, String mobile)
    {
    this.autoid=autoid;
    .....
    ....
    }

    //setter
    //getter
}

如果这是Web应用程序,那么您可以在init方法中加载此缓存映射,并根据来自map的行的autuid调用该值。