Java/JPA class 用于存储应用程序设置
Java/JPA class for storing application settings
如何使用 JPA 为我的 Java Servlet 应用程序创建 Settings
class?我在想像静态 class 和 key/value 对的映射之类的东西,用于存储应用程序设置,如电子邮件服务器地址等。像这样的东西:
public class ApplicationSettings {
private static Map<String, String> settings;
对于基于 Spring 的应用程序
您可以使用缓存来存储数据库中的属性。您可以使用 @Cacheable("properties")
调用数据库服务并将其加载到缓存中。如果您想更新、删除或添加新的 属性,您可以使用 @CacheEvict(value = "properties", allEntries = true)
,您可以在其中调用数据库服务来执行实际操作。 @CacheEvict
将清除为 properties
键映射的所有现有缓存,并通过隐式调用 @Cacheable("properties")
加载新属性
@Repository
public class ApplicationSettings {
private DatabaseService databaseService;
public ApplicationSettings(DatabaseService databaseService) {
this.databaseService = databaseService;
}
@Cacheable("properties")
public Map<String, String> getAppProperties() {
return databaseService.getAppProperties();
}
@CacheEvict(value = "properties", allEntries = true)
public void updateAppProperties(String key, String value) throws IOException {
databaseService.updateAppProperties(key, value);
}
}
您现在可以在任何需要
等属性的地方使用 ApplicationSettings
@Autowired
private ApplicationSettings applicationSettings;
:
:
Map<String, String> appProperties = applicationSettings.getAppProperties();
对于基于 Servlet 的应用程序
您可以使用 EhCache 或简单地使用 Sevlet Listener 来实现上述场景
在web.xml
<web-app ....>
<listener>
<listener-class>
com.listernerpackage.ApplicationInitializationListener
</listener-class>
</listener>
:
创建一个 ServletContextListener
public class ApplicationInitializationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
Map<String, String> properties = someDbManager.getAppProperties();
context.setAttribute("properties", properties );
}
}
您可以通过调用
来检索 servlet 中的属性
Map<String, String> properties = (Map<String, String>) this.getContext().getAttribute("properties");
如何使用 JPA 为我的 Java Servlet 应用程序创建 Settings
class?我在想像静态 class 和 key/value 对的映射之类的东西,用于存储应用程序设置,如电子邮件服务器地址等。像这样的东西:
public class ApplicationSettings {
private static Map<String, String> settings;
对于基于 Spring 的应用程序
您可以使用缓存来存储数据库中的属性。您可以使用 @Cacheable("properties")
调用数据库服务并将其加载到缓存中。如果您想更新、删除或添加新的 属性,您可以使用 @CacheEvict(value = "properties", allEntries = true)
,您可以在其中调用数据库服务来执行实际操作。 @CacheEvict
将清除为 properties
键映射的所有现有缓存,并通过隐式调用 @Cacheable("properties")
加载新属性
@Repository
public class ApplicationSettings {
private DatabaseService databaseService;
public ApplicationSettings(DatabaseService databaseService) {
this.databaseService = databaseService;
}
@Cacheable("properties")
public Map<String, String> getAppProperties() {
return databaseService.getAppProperties();
}
@CacheEvict(value = "properties", allEntries = true)
public void updateAppProperties(String key, String value) throws IOException {
databaseService.updateAppProperties(key, value);
}
}
您现在可以在任何需要
等属性的地方使用ApplicationSettings
@Autowired
private ApplicationSettings applicationSettings;
:
:
Map<String, String> appProperties = applicationSettings.getAppProperties();
对于基于 Servlet 的应用程序
您可以使用 EhCache 或简单地使用 Sevlet Listener 来实现上述场景
在web.xml
<web-app ....>
<listener>
<listener-class>
com.listernerpackage.ApplicationInitializationListener
</listener-class>
</listener>
:
创建一个 ServletContextListener
public class ApplicationInitializationListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
ServletContext context = event.getServletContext();
Map<String, String> properties = someDbManager.getAppProperties();
context.setAttribute("properties", properties );
}
}
您可以通过调用
来检索 servlet 中的属性Map<String, String> properties = (Map<String, String>) this.getContext().getAttribute("properties");