我有一个春季启动应用程序。我在Spring启动应用程序中使用ehcahce实现了缓存。缓存工作正常,但是当关闭脚本被触发时,tomcat没有关闭。我已经在我的构建中跳过了默认容器,并且我已经使用jstack进行了测试,并且发现ehcache阻止了应用程序关闭。当弹簧启动关闭时,我需要为ehcache实现关闭。我知道我需要为ehcahce实现一个关闭监听器。我尝试在application.properties中设置属性。
<li><a href="<?php echo $category['manufacturer'][$i]['href']; ?>"><?php echo $category['manufacturer'][$i]['name']; ?></a></li>
但它没有成功。这应该是理想情况下尝试的最后一个选项。我需要尝试在web.xml中添加一个监听器
net.sf.ehcache.enableShutdownHook=true
但是由于spring boot没有web.xml,如何实现这个监听器?我可以在webconfig中执行此操作吗?任何人实施此请帮助。
我查看了一些较旧的帖子Tomcat not shutting down when Spring boot app is deployed with ehcache,但看起来没有做出任何正确的回应。
添加配置。(根据下面的评论) 这是我的主要课程,我已经配置了@EnableCaching
<listener>
<listener-class>
net.sf.ehcache.constructs.web.ShutdownListener</listener-class>
</listener>
{
@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
}
}
pom.xml中的我已经配置了缓存启动。
@Cacheable(value = CACHE_1, key = "#root.target.KEY")
public Map<String, String> cache1() {
根据评论,我尝试添加bean,但没有帮助。
<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>
答案 0 :(得分:0)
如何创建spring上下文侦听器。捕获上下文甚至毁坏并关闭ehcache。
public class SpringEhcacheShutdownListenerBean implements ApplicationListener {
@Override
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ContextClosedEvent) {
// now you can do ehcache shutdown
// ...
}
}
}
不要忘记将课程注册为春天豆。