如何在Java中加载应用程序中经常使用的全局设置
1) 在我的应用程序中,我们有一个表,其中存储了大量用于每个功能的一些设置细节 现在我们正在做的是时不时地进行DB调用,以获取详细信息并检查条件。这导致了针对相同条件的大量DB调用和重复调用。此表中有相当多的条件记录。我们需要对此进行更改以使其性能更好 2) 在我以前的项目中,我也有同样的要求,我们有一个配置表,在其中配置这些设置,在那里我们实现了它,就像在应用程序启动时从表中加载配置,并将它们存储在System.setProperty(名称,值)…中,然后使用System.getProperty(名称)若任何设置被更改,我们将在其系统属性中更新它。这就像一个符咒 然而,在我目前的情况下(上面的第1点),我不认为我的prev方式是最好的方式,因为表中有很多记录都有很多列。 有人能提出一种在Java中实现这种行为的方法吗?我能想到的其中一些是 1) 使用System.setProperty,如我所解释的。 2) 使用EHCache-standalone或hibernate之类的缓存(就像我们使用hibernate一样)如何在Java中加载应用程序中经常使用的全局设置,java,hibernate,caching,ehcache,Java,Hibernate,Caching,Ehcache,1) 在我的应用程序中,我们有一个表,其中存储了大量用于每个功能的一些设置细节 现在我们正在做的是时不时地进行DB调用,以获取详细信息并检查条件。这导致了针对相同条件的大量DB调用和重复调用。此表中有相当多的条件记录。我们需要对此进行更改以使其性能更好 2) 在我以前的项目中,我也有同样的要求,我们有一个配置表,在其中配置这些设置,在那里我们实现了它,就像在应用程序启动时从表中加载配置,并将它们存储在System.setProperty(名称,值)…中,然后使用System.getPropert
有没有更好的方法来存储应用程序的全局设置以避免DB调用?使用Ehcache的最佳方法(但我从未实现过)。您不应该使用系统属性,因为它可能会导致与其他系统属性冲突。 我是如何做到的在我的例子中,我创建了一个bean类,它的属性是你的表列,比如autoid、name、address、mobile
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
{
}
}
如果这是web应用程序,那么您可以在init方法中加载此缓存映射,并根据映射中行的autuid调用值。研究
属性
类及其方法。映射
?@David-感谢您的响应,但我想属性类在这里没有多大帮助。我不明白为什么不这样做。我总是用它来解决你描述的问题。但这是你的申请,所以你知道的最好。谢谢你的回复,但是Ehcache是否有任何实现此功能的用例,因为我不太怀疑是否可以不时刷新缓存。对于你发布的代码,我必须以某种方式使其保持静态,以便像你告诉的init一样加载一次并使其可用。我不知道Ehcache。是的,您已经使用了静态映射..如果您想更新缓存,那么也可以将这个静态映射放在doPost或doGet方法中,就像这样if(“updatecache”.equals(request.getParameter(“cacheupadte”){map=getTag();}
和else块中的剩余逻辑。在这种情况下,您必须触发一个单独的url来更新缓存,而无需重新启动应用程序。但是如果您担心线程安全,那么事情就不会太复杂了。但是您不认为这是企业应用程序的常见功能,并且有一些标准方法可以实现。是的,我有我也这么认为,但同样的道理,如果没有管理层的关注,我无法实施第三方api。获得此类许可需要很长的过程,只有得到客户和所有人的适当认可,他们才会批准。我正在为此努力游说。在此之前,我会坚持下去。如果你有更好的本土想法,你可以与我分享.
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
}