首页
关于
推荐
奈飞账号
摸鱼信息
Search
1
最棒的开源OSS存储 MinIO,真香!
369 阅读
2
使用docker搭建自己的邮箱服务器收发邮件
334 阅读
3
手淫如何增强你的免疫系统
307 阅读
4
🎥购买Netflix奈飞账号获取低价渠道Netflix账号合租完全指南2024
299 阅读
5
mysql开启事件调度器
275 阅读
生活杂谈
技术分享
读书笔记
互联网发现
阅读发现
登录
Search
标签搜索
docker
开发
tool
教程
windows
开源oss存储
MinIO
git
http代理
邮件服务
mail
mysql
sql
spring
读书
阅读
读书笔记
Linux
Shell
银行卡
https://www.ziyuzile.cn
累计撰写
21
篇文章
累计收到
4
条评论
首页
栏目
生活杂谈
技术分享
读书笔记
互联网发现
阅读发现
页面
关于
推荐
奈飞账号
摸鱼信息
搜索到
2
篇与
的结果
2018-03-22
spring动态注册bean
某些情况下静态的配置信息无法满足系统需求,需要根据静态配置动态生成bean注册到spring中。为啥要动态注册bean?某些情况下静态的配置信息无法满足系统需求,需要根据静态配置动态生成bean注册到spring中。在写一些工具的时候会用到的,原本打算写一个类似 Fegin 的小组件。于是有了这个研究动机。但后来网上找到了我想要的开源项目,就不重复造轮子了,但是技术点还是研究了一下。 感兴趣的可以去看看这个项目:Forest啥时候注册bean?太晚了肯定不行啊,@Autowired不等人,在Autowired注入之后注册肯定报错啊,想都不要想。那么就要在Autowired之前。咋注册呢?Spring 通过一个 BeanPostProcessor 对 @Autowired 进行解析,所以要让 @Autowired 起作用必须事先在 Spring 容器中声明 AutowiredAnnotationBeanPostProcessor Bean。思路一搞一个类实实现BeanPostProcessor,ApplicationContextAware接口 让它早于AutowiredAnnotationBeanPostProcessor运行。BeanPostProcessor,可以在spring容器实例化bean之后,在执行bean的初始化方法前后,添加一些自己的处理逻辑。but这个我没搞出来不知的问题出在哪里,有机会再研究研究。思路二搞一个类实现BeanFactoryPostProcessor接口.这是个啥接口呢?实现该接口,可以在spring的bean创建之前,修改bean的定义属性。不废话直接贴代码。public class MyBeanFactoryPostProcessor implements ApplicationContextAware, BeanFactoryPostProcessor { private static ApplicationContext applicationContext; private String packageS; public String getPackageS() { return packageS; } public void setPackageS(String packageS) { this.packageS = packageS; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { MyBeanFactoryPostProcessor.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String beanName) { return applicationContext.getBean(beanName); } public static <T>T getBean(String beanName , Class<T>clazz) { return applicationContext.getBean(beanName , clazz); } /** * 此方法会在bean初始化完成但未实例化时调用 */ public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { //beanFactory 也可以拿到当前系统从已经初始化好的bean,也可以做一些修改 //设置了扫描路径则则可以根据扫描包扫描相应的注解 System.out.println("packageS==================="+packageS); //获取BeanFactory DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory(); //模拟扫描到的bean,用动态代理等等方式创建 //创建bean信息. BeanDefinitionBuilder beanDefinitionBuilder =BeanDefinitionBuilder.genericBeanDefinition(RestBean.class); beanDefinitionBuilder.addPropertyValue("name","张三"); //动态注册bean. defaultListableBeanFactory.registerBeanDefinition("restBean",beanDefinitionBuilder.getBeanDefinition()); //注册进spring上下文的bean可以获取一下看看 BeanDefinition bd = beanFactory.getBeanDefinition("restBean"); } } javaConfig@Configuration public class Config { @Bean public MyBeanFactoryPostProcessor getMyBeanFactoryPostProcessor() { MyBeanFactoryPostProcessor sss = new MyBeanFactoryPostProcessor(); sss.setPackageS("com.xxxx"); return sss; } } 现在就可以在spring管理的任何类中使用了 @Autowired RestBean restBean;代码地址:BeanLoad 知乎上看到一个专栏,学到不少东西。有兴趣可以关注一下。晓风轻
2018年03月22日
146 阅读
0 评论
0 点赞
2018-02-14
mysql开启事件调度器
mysql event 应用在系统管理或者数据库管理中,需要经常周期性的执行某一个命令或者SQL语句的情况。查看是否开启mysql> SHOW VARIABLES LIKE '%sche%';设置开启 mysql>SET GLOBAL event_scheduler = ON;事件调度器event_scheduler的语法:a. 事件调度器event_scheduler的语法主要包括创建,修改,删除,新建一个event后,如果还未删除,我们可以在mysql的information_schema下的EVENTS表中查到该event。创建event(CREATE EVENT) 语法:CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; 说明:event_name :创建的event名字(唯一确定的); ON SCHEDULE:计划任务 schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY 语法:AT timestamp [+ INTERVAL interval] | EVERY interval [STARTS timestamp] [ENDS timestamp] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}(具体说明请参考手册); [ON COMPLETION [NOT] PRESERVE]: 可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉 ; [COMMENT 'comment'] :可选项,comment 用来描述event;相当注释,最大长度64个字节 [ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改 DO sql_statement: 需要执行的sql语句(可以是复合语句); 例子: CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions; (每隔一小时删除session表)注意使用复用语句的时候记得使用分隔符;而且sql语句是由限制,这种限制跟函数fuction和触发器 trigger中的sql语句限制是一样的,具体是指:LOCK TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的;CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不可以再嵌入式的embedded mysql数据中使用。b. 修改event(ALTER EVENT)语法:ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement] 说明:语句中的ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE, and DO 与CREATE EVENT中的完全一致 例子: 先创建一个event: CREATE EVENT myevent ON SCHEDULE EVERY 6 HOUR COMMENT 'A sample comment.' DO UPDATE myschema.mytable SET mycol = mycol + 1; 修改1: ALTER EVENT myevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时执行一次,修改成4小时后每12小时执行一次) 修改2: ALTER EVENT myevent DISABLE; (将默认的ENABLE修改为 DISABLE) 注意:修改event仅仅对已经存在的event起作用c. 删除eventDROP EVENT [IF EXISTS] event_name
2018年02月14日
275 阅读
0 评论
0 点赞