1)在我的应用程序中,我们有一个表存储了一些设置细节,这些细节大量用于每个功能。基本上在这个表中设置了一些条件,这些条件都经过检查。
现在我们正在做的是不时地调用DB来获取细节并检查条件。这导致了大量的DB调用和重复调用相同的条件。有很多条件记录在这个表中。我们需要改变它以使其表现更好。
2)在我之前的项目中,我也有相同的要求,我们有一个配置表,配置了这样的设置,我们实现它就像在启动应用程序时从表中加载配置并将它们存储在System.setProperty(name ,值)..然后使用System.getProperty(name)来检索它。如果任何设置被更改,我们在其System属性中更新它。这就像一个魅力。
然而,在我目前的情况下(上面的第1点),我不认为我的流行方式是最好的方法,因为表中存在大量列的记录。 任何人都可以建议如何在Java中实现这种行为?其中一些我能想到的是
1)像我解释的那样使用System.setProperty。 2)使用像EHCache这样的缓存 - 独立或使用hibernate(因为我们使用的是休眠)。
是否有更好的方法来存储应用程序的全局设置以避免数据库调用?
答案 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调用该值。