一些系统配置,存储在数据库中,需要在项目启动时加载进缓存。此时可以实现ApplicationListener类来实现监听。
第一步:
package com.lic.base.servlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import com.lic.app.system.service.impl.SysConfigService;
import com.lic.base.tools.CacheHelp;
public class StartApplicationListener implements ApplicationListener<ContextRefreshedEvent>{
protected Logger log = LoggerFactory.getLogger(StartApplicationListener.class);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
log.info("加载系统配置...");
SysConfigService sysConfigService = event.getApplicationContext().getBean(SysConfigService.class);
CacheHelp.SYS_CONFIG_MAP = sysConfigService.selectKeyValueByGroupCode(null);
log.info("系统配置加载完成...");
}
}
这个类 不会自动注册,需要我们手动注册。
第二步:
package com.lic.boot;
import java.util.Properties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ImportResource;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import com.lic.base.servlet.StartApplicationListener;
@SpringBootApplication
@ImportResource("classpath:/spring/applicationContext.xml")
//@Configuration
@EnableAutoConfiguration
//@ComponentScan("main.java.com.huike")
// @EnableEurekaServer
public class StartApplication {
private static final Logger log = LoggerFactory.getLogger(StartApplication.class);
public static void main(String[] args) {
log.info("服务开始启动了");
SpringApplication app = new SpringApplication(StartApplication.class);
app.addListeners(new StartApplicationListener());
app.run(args);
}
}
运行可以看到控制台打印:
04-27 15:52:23.917 [main] INFO com.huike.boot.StartApplication - 服务开始启动了
04-27 15:52:24.489 [background-preinit] INFO org.hibernate.validator.internal.util.Version - HV000001: Hibernate Validator 5.2.1.Final
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.4.3.RELEASE)
04-27 15:52:24.870 [main] INFO com.huike.boot.StartApplication - No active profile set, falling back to default profiles: default
04-27 15:52:25.445 [main] WARN org.mybatis.spring.mapper.ClassPathMapperScanner - No MyBatis mapper was found in '[com.huike.boot]' package. Please check your configuration.
04-27 15:52:26.021 [main] INFO org.apache.catalina.core.StandardService - Starting service Tomcat
04-27 15:52:26.022 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.6
04-27 15:52:26.103 [localhost-startStop-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/] - Initializing Spring embedded WebApplicationContext
04-27 15:52:27.716 [main] INFO com.huike.base.servlet.StartApplicationListener - 加载系统配置...
04-27 15:52:28.013 [main] DEBUG com.huike.app.system.service.ISysConfigService.selectKeyValueByGroupCode - ==> Preparing: select ckey, cvalue from sys_config where 1 = 1
04-27 15:52:28.030 [main] DEBUG com.huike.app.system.service.ISysConfigService.selectKeyValueByGroupCode - ==> Parameters:
04-27 15:52:28.045 [main] DEBUG com.huike.app.system.service.ISysConfigService.selectKeyValueByGroupCode - <== Total: 21
04-27 15:52:28.049 [main] INFO com.huike.base.servlet.StartApplicationListener - 系统配置加载完成...
04-27 15:52:28.054 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8090"]
04-27 15:52:28.062 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler [http-nio-8090]
04-27 15:52:28.070 [main] INFO org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read
04-27 15:52:28.088 [main] INFO com.huike.boot.StartApplication - Started StartApplication in 4.088 seconds (JVM running for 4.621)
打成jar包是可以使用的,但是打成war包就不能使用了。解决办法是在监听器上加一个@Component注解。
package com.huike.base.servlet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
import com.huike.app.system.service.impl.SysConfigService;
import com.huike.base.tools.CacheHelp;
@Component
public class StartApplicationListener implements ApplicationListener<ContextRefreshedEvent>{
protected Logger log = LoggerFactory.getLogger(StartApplicationListener.class);
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
log.info("加载系统配置...");
SysConfigService sysConfigService = event.getApplicationContext().getBean(SysConfigService.class);
CacheHelp.SYS_CONFIG_MAP = sysConfigService.selectKeyValueByGroupCode(null);
log.info("系统配置加载完成...");
}
}
这样也会在项目启动时执行。