一.游标简介
Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样,把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达到循环数据集的目的
一.游标简介
Oracle游标是通过关键字CURSOR的来定义一组Oracle查询出来的数据集,类似数组一样,把查询的数据集存储在内存当中,然后通过游标指向其中一条记录,通过循环游标达到循环数据集的目的
1.前置准备
– 到github下载spring源码:spring-framework
– 到Gradle官网下载gradle,binary-only(仅二进制)或complete(完整版)任选其一
1.修改原因
gradle默认仓库路径在C盘下,长此以往将影响系统运行速度。
1.打开”任务管理器”选择”性能”,点击”资源监视器”
2.选择”CPU”,找到”关联的句柄”
1.桌面操作类Desktop相关接口如下:
// 判断是否能获取到桌面 static boolean isDesktopSupported(); // 获取Desktop实例 static Desktop getDesktop(); // 启动默认浏览器并打开URI对象 void browse(URI uri); // 打开文件或文件夹 void open(File file); // 编辑文件 void edit(File file); // 打印文件 void print(File file); // 打开默认邮件客户端 void mail(); // 打开默认邮件客户端,填充由 mailto:URI 指定的消息字段 void mail(URI mailtoURI); /* * 判断是否支持action行动, 参数为以下值之一: * Desktop.Action.OPEN: 打开文件 * Desktop.Action.EDIT: 编辑文件 * Desktop.Action.PRINT: 打印文件 * Desktop.Action.MAIL: 打开邮件 * Desktop.Action.BROWSE: 打开浏览器 */ boolean isSupported(Desktop.Action action);
2.Demo(打开浏览器并访问我的博客)
1.在任意位置新建文件夹,my-chrome-plugin
2.在文件夹下新建manifest.json文件
1.链接到WordPress对应FTP
2.找到wp-content/languages/zh_CN.php
@Async:由Spring提供,被标记的函数转为异步执行;使用不当则无法达到预期效果,本文主要针对添加注解无效的情况进行分析。
@Service public class TestService{ public void test(){ System.out.println("TestService.test() start"); testAsync(); System.out.println("TestService.test() end"); } @Async public void testAsync(){ System.out.println("TestService.testAsync() start"); Thread.sleep(3000); System.out.println("TestService.testAsync() end"); } } //在外部类调用test() //执行到testAsync()时没有异步处理 //在外部类调用testAsync() //执行到testAsync()时异步处理
结论:
@Async注解本质上使用的是动态代理;
Spring在容器初始化的时候会将含有AOP注解的类对象替换为代理对象;
外部类调用含有AOP注解的函数时,走代理对象执行异步处理逻辑达到异步效果;
test()调用testAsync()时是自己直接调用自己,没有通过代理类,所以无效。
常用的AOP注解还有@Transactional,使用时无效也可能是如上原因导致
解决方案:
1.采用如上方式,通过外部类调用
需求:删除table_name表中的重复数据;判定重复的标准为:item_1,item_2,item_3的值一样,保留最新的一条
BEGIN LOOP --手动开启本次会话的并行 ALTER SESSION ENABLE PARALLEL DML; --删除分组后重复数据中ROWID最小的数据 DELETE /*+ PARALLEL(8) */ FROM TABLE_NAME WHERE ROWID IN( SELECT /*+ PARALLEL(8) */ MIN(ROWID) FROM TABLE_NAME A GROUP BY A.ITEM_1,A.ITEM_2,A.ITEM_3 HAVING COUNT(*)>1 ); COMMIT; --手动关闭本次会话的并行 ALTER SESSION DIABLE PARALLEL DML; --如受影响行数等于0,则结束循环 EXIT WHEN SQL%ROWCOUNT=0; END LOOP; END;
以上逻辑是重复数据中留下ROWID最大的那条,如需要指定留下哪一条可参考如下:留下CREATE_TIME最新的一条