在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 后台框架源码
时间: 2024-10-13 04:29:30