码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 初始化2次的问题

时间:2015-11-17 13:02:14      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

在Spring的使用中,有时初始化一些公共类,比如数据源、常量配置等,这些方法会执行两次,导致程序执行出现异常。

 

一个解决方法是利用Spring的事件机制,事件机制需要实现ApplicationListener监听器,只要编写一个实现类实现该接口的onApplicationEvent方法,在方法体中初始化应用需要的初始化数据,并做防二次初始化的处理。

 

此处是一个jedis工厂类的代码:

 

1.public class JedisFactory implements ApplicationListener<ApplicationEvent> {  
2.    private static Logger logger = LogHelper.LOG_CollectDataService;  
3.  
4.    private static JedisPoolConfig jedisPoolConfig;  
5.  
6.    private static JedisPool jedisPool;  
7.  
8.    private static boolean isStart = false;  
9.  
10.    @Value("${redis.maxActive}")  
11.    private String maxActive;  
12.  
13.    @Value("${redis.maxIdle}")  
14.    private String maxIdle;  
15.  
16.    @Value("${redis.maxWait}")  
17.    private String maxWait;  
18.  
19.    @Value("${redis.ip}")  
20.    private String host;  
21.  
22.    @Value("${redis.port}")  
23.    private String port;  
24.  
25.    @Override  
26.    public void onApplicationEvent(ApplicationEvent event) {  
27.        if (!isStart) {  
28.            isStart = true;  
29.  
30.            try {  
31.                jedisPoolConfig = new JedisPoolConfig();  
32.  
33.                // 最大连接数  
34.                jedisPoolConfig.setMaxActive(Integer.parseInt(maxActive));  
35.                // 最大空闲连接数  
36.                jedisPoolConfig.setMaxIdle(Integer.parseInt(maxIdle));  
37.                // 获取连接最大等待时间  
38.                jedisPoolConfig.setMaxWait(Integer.parseInt(maxWait));  
39.                // 设置获取连接前是否进行连接测试  
40.                jedisPoolConfig.setTestOnBorrow(true);  
41.  
42.                jedisPool = new JedisPool(jedisPoolConfig, host, Integer.parseInt(port));  
43.  
44.                logger.info("JedisPool 已初始化, ", JSON.toJSONString(jedisPool));  
45.            } catch (Exception e) {  
46.                logger.error("JedisPool 初始化异常", e);  
47.            }  
48.        }  
49.    }  
50.  
51.    public static Jedis getJedis() {  
52.        Jedis jedis = null;  
53.        try {  
54.            logger.info("jedisPool = ", jedisPool.toString());  
55.            jedis = jedisPool.getResource();  
56.            return jedis;  
57.        } catch (Exception e) {  
58.            logger.error("获取Jedis实例异常", e);  
59.            jedisPool.returnBrokenResource(jedis);  
60.            return null;  
61.        }  
62.    }  
63.  
64.    /** 
65.     * 将jedis对象释放回连接池中 
66.     * 
67.     * @param jedis 使用完毕的Jedis对象 
68.     * @return true 释放成功;否则返回false 
69.     */  
70.    public static boolean release(Jedis jedis) {  
71.        if (jedis != null) {  
72.            jedisPool.returnResource(jedis);  
73.            return true;  
74.        }  
75.  
76.        return false;  
77.    }  
78.}  

获取【下载地址】 【新技术】现在最流行的java后台框架组合java springmvc mybaits mysql oracle html5 后台框架源码

 

Spring 初始化2次的问题

标签:

原文地址:http://www.cnblogs.com/weqweqw/p/4971280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!