我有一个spring boot应用程序。我在spring boot应用程序中使用ehcahce实现了缓存。缓存工作正常,但触发关闭脚本时tomcat没有关闭。我跳过了构建中的默认容器,并使用jstack进行了测试,可能发现ehcache阻止了应用程序关闭。我需要在Spring Boot关闭时实现ehcache的关闭。我知道我需要为ehcahce实现一个关机侦听器。我已尝试在应用程序中设置属性。属性。
net.sf.ehcache.enableShutdownHook=true
但是没有成功。这应该是理想情况下尝试的最后一个选项。我需要尝试在web.xml中添加一个侦听器
<listener>
<listener-class>
net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
</listener>
但由于spring boot没有web。xml如何实现这个侦听器?我可以在网络配置中完成吗?任何人实现了这一点,请帮助。
我研究了一些旧帖子,当Spring boot应用程序部署了ehcache时,Tomcat没有关闭,但看起来没有任何正确的响应。
添加配置。(根据下面的评论)这是我的主类,我已经配置了@Enable缓存
@SpringBootApplication
@EnableAsync
@EnableCaching
public class Application extends SpringBootServletInitializer implements AsyncConfigurer
{
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10" eternal="false"
timeToIdleSeconds="1200" timeToLiveSeconds="600" overflowToDisk="true" />
<cache name="cache1" maxElementsInMemory="60000" eternal="false"
overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="43200" memoryStoreEvictionPolicy="LFU"/>
<cache name="cache2" maxElementsInMemory="500" eternal="false"
overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="43200" memoryStoreEvictionPolicy="LFU"/>
</ehcache>
public class ApplicationStartupService implements
ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(final ApplicationReadyEvent event) {
//load cache
}
用缓存注释的方法。
@Cacheable(value = CACHE_1, key = "#root.target.KEY")
public Map<String, String> cache1() {
}
在pom.xml我已经配置了缓存启动。
<packaging>war</packaging>
<name>myapp</name>
<description>my test application</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.7.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<jcl.slf4j.version>1.7.12</jcl.slf4j.version>
<logback.version>1.1.3</logback.version>
<rootDir>${project.basedir}</rootDir>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
根据评论,我已经尝试添加bean,但没有任何帮助。
@Bean
public CacheManager cacheManager() {
net.sf.ehcache.CacheManager cacheManager = new net.sf.ehcache.CacheManager();
return new EhCacheCacheManager(cacheManager);
}
创建一个spring上下文侦听器怎么样。捕获上下文并关闭ehcache。
public class SpringEhcacheShutdownListenerBean implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextClosedEvent) {
// now you can do ehcache shutdown
// ...
}
}
}
不要忘记将该类注册为SpringBean。
启动 1. 轻触主画面上您想启动的应用程序图标。 显示LiveArea™。 2. 轻触[开始]。 中断/继续 按下PS键即可返回LiveArea™。若要继续,请轻触[继续]。 关闭 1. 按下PS键。 返回LiveArea™。 2. 请由画面右上角将LiveArea™撕下。
我正在使用appium dot net驱动程序,我想关闭/打开wifi。请建议c#中使用appium或adb命令的方法,该命令可以发送到设备以关闭wifi
在Swing中,您可以简单地使用在窗口关闭时关闭整个应用程序。 然而,在JavaFX中,我找不到一个等价物。我有多个窗口打开,我想关闭整个应用程序,如果一个窗口关闭。在JavaFX中实现这一点的方法是什么?
我试图重新创建Connect四,我成功了。但我想通过频繁地切换颜色,给玩家一个获胜的四张光盘在哪里的指示。我对线程和编程中的时间概念是新的。 我也成功地给了用户这个指示,但是在关闭应用程序之后,控制台仍然会给出输出,也是在使用SetonCloserEquest时。 代码如下:
问题内容: 我需要在Java Web应用程序停止或tomcat停止时保存一些数据。如何才能做到这一点?编辑:如果我使用jvm shutdown钩有什么缺点? 问题答案: 使用在您的web.xml 中实现ServletContextListener的类: