All posts by 龙生
使用Statement 的addBatch方法批量导入数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
try { boolean auto = conn.getAutoCommit(); conn.setAutoCommit(false); Statement stat = conn.createStatement(); Iterator<String> it = sourcetime.iterator(); // System.out.println("get sourcetime iterator successfully"); while (it.hasNext()) { String st = it.next(); //System.out.println("this st*_*"+st+"*_*"); Pattern subpat = Pattern.compile("[|]"); // 创建Pattern实例 String mac_time[] = subpat.split(st); int time = Integer.parseInt(mac_time[1]); // time String mac = mac_time[0]; // System.out.println("this::::"+mac+","+gname +","+time); String sql = "insert into edges (source,target,time) values('" + mac + "','" + gname + "','" + time + "')"; stat.addBatch(sql); } stat.executeBatch(); conn.commit(); logger.info("insert "+gname+" data into DB edges finished"); conn.setAutoCommit(auto); } catch (SQLException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } |
from:https://www.cnblogs.com/ivywenyuan/p/4148541.html
View Detailsjava执行SQL脚本文件
1. 在工作中很多时候需要执行一个SQL脚本文件到数据库中作为初始化数据;spring提供了一个工具类ScriptUtils,具体用法如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@SpringBootTest class ExecuteSqlScriptApplicationTests { @Autowired private DataSource dataSource; @Test void contextLoads() throws SQLException, IOException { Resource classPathResource = new ClassPathResource("init/student.sql"); ScriptUtils.executeSqlScript(dataSource.getConnection(), classPathResource); } } |
2. 但是有时候我们的SQL脚本文件很大,甚至是几百mb,这样容易造成内存溢出的情况,因此我写了一个工具类,对SQL脚本进行拆解,然后批量执行。 这样每批量执行后,就清空缓存中的SQL,因此解决内存溢出问题。如下: 具体还没有用大数据量的脚本测试,等周一到公司再测试一下吧,哈哈哈。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
@SpringBootTest class ExecuteSqlScriptApplicationTests { @Autowired private DataSource dataSource; @Test void contextLoads() throws SQLException, IOException { Resource classPathResource = new ClassPathResource("init/student.sql"); ScriptUtils.executeSqlScript(dataSource.getConnection(), classPathResource); // 分批处理SQL脚本 batchExecuteSql(classPathResource, 5); } /** * SQL脚本分解执行 * @param resource SQL脚本资源 * @param batchNumber 每多少条SQL执行一次 * @throws SQLException * @throws IOException */ public void batchExecuteSql(Resource resource, int batchNumber) throws SQLException, IOException { Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement(); BufferedReader bufferedReader = null; try { //获取字符缓冲流 bufferedReader = new BufferedReader(new InputStreamReader(resource.getInputStream())); int l; int i = 0; StringBuilder sql = new StringBuilder(); while ((l = bufferedReader.read()) != -1) { char read = (char) l; sql.append(read); if (read == ';') { // 一个完整的SQL语句 i ++; statement.addBatch(sql.toString()); if (i % batchNumber == 0) { System.out.println("每" + batchNumber + "条语句批量执行开始......"); statement.executeBatch(); statement.clearBatch(); System.out.println("每" + batchNumber + "条语句批量执行结束......"); } //清除StringBuilder中的SQL语句 sql.delete(0, sql.length()); } } if (i % batchNumber != 0) { System.out.println("执行最后不足" + batchNumber + "条语句开始!!!"); statement.executeBatch(); statement.clearBatch(); System.out.println("执行最后不足" + batchNumber + "条语句结束!!!"); } } finally { if (bufferedReader != null) { bufferedReader.close(); } if (connection != null) { connection.close(); } if (statement != null) { statement.close(); } } } } |
from:https://www.cnblogs.com/fangyan1994/p/14123592.html
View Details记一次apollo连接失败处理
服务器:centos7 apollo:1.7 开发环境:springboot2.3 1.整合
1 2 3 4 5 6 7 8 9 10 |
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.10</version> </dependency> |
1 2 3 4 |
app.id=dev apollo.meta=http://192.167.2.123:8080 #eureka地址 apollo.bootstrap.enable=true apollo.bootstrap.namespaces=application |
1 2 3 4 |
@SpringBootApplication @EnableApolloConfig public class ApolloServerApplication { } |
2.启动时异常
1 2 3 4 5 6 7 8 |
Load config failed, will retry in 1 SECONDS. appId: dev, cluster: default, namespaces: application 2021-02-01 19:02:30.617 WARN 42252 --- [ main] c.c.f.a.i.AbstractConfigRepository : Sync config failed, will retry. Repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository, reason: Load Apollo Config failed - appId: dev, cluster: default, namespace: application, url: http://192.168.1.26:8080/configs/dev/default/application?ip=192.168.1.2 [Cause: Could not complete get operation [Cause: connect timed out]] 2021-02-01 19:02:31.623 WARN 42252 --- [ main] c.c.f.a.i.RemoteConfigRepository : Load config failed, will retry in 1 SECONDS. appId: dev, cluster: default, namespaces: application 2021-02-01 19:02:33.624 WARN 42252 --- [ main] c.c.f.a.i.LocalFileConfigRepository : Sync config from upstream repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository failed, reason: Load Apollo Config failed - appId: dev, cluster: default, namespace: application, url: http://192.168.1.26:8080/configs/dev/default/application?ip=192.168.1.2 [Cause: Could not complete get operation [Cause: connect timed out]] 2021-02-01 19:02:33.628 WARN 42252 --- [ngPollService-1] c.c.f.a.i.RemoteConfigLongPollService : Long polling failed, will retry in 1 seconds. appId: dev, cluster: default, namespaces: application, long polling url: http://192.168.1.26:8080/notifications/v2?cluster=default&appId=dev&ip=192.168.1.2¬ifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D, reason: Could not complete get operation [Cause: connect timed out] 2021-02-01 19:02:34.625 WARN 42252 --- [ main] c.c.f.a.i.RemoteConfigRepository : Load config failed, will retry in 1 SECONDS. appId: dev, cluster: default, namespaces: application 2021-02-01 19:02:35.629 WARN 42252 --- [ngPollService-1] c.c.f.a.i.RemoteConfigLongPollService : Long polling failed, will retry in 2 seconds. appId: dev, cluster: default, namespaces: application, long polling url: http://192.168.1.26:8080/notifications/v2?cluster=default&appId=dev&ip=192.168.1.2¬ifications=%5B%7B%22namespaceName%22%3A%22application%22%2C%22notificationId%22%3A-1%7D%5D, reason: Could not complete get operation [Cause: connect timed out] 2021-02-01 19:02:36.625 WARN 42252 --- [ main] c.c.f.a.i.LocalFileConfigRepository : Sync config from upstream repository class com.ctrip.framework.apollo.internals.RemoteConfigRepository failed, reason: Load Apollo Config failed - appId: dev, cluster: default, namespace: application, url: http://192.168.1.26:8080/configs/dev/default/application?ip=192.168.1.2 [Cause: Could not complete get operation [Cause: connect timed out]] |
3.分析原因 http://192.168.1.26:8080 这个地址不是我eureka的地址,所以才找的时候会找不到 4.解决办法 启动的环境变量中加入: -Dapollo.configService=http://192.167.2.123:8080 将地址改为eureka的地址就好 ———————————————— 版权声明:本文为CSDN博主「weixin_38777065」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_38777065/article/details/113527235
View Detailsntpdate提示
19 Jan 10:33:11 ntpdate[29616]: no server suitable for synchronization found 这种问题从下面几个点开始验证 1.查看防火墙是否开通udp的123端口,是udp 无法使用telnet来验证,只能看iptables和硬墙是否有策略 2.如果端口开通,查看服务器端的ntp.conf文件中server是否正常,如果配置有问题,肯定无法使用 3.修改配置是否重新启动ntpd服务 4.查看服务端ntpd进程是否正常 ntpdate -d ntp服务端ip 遇到的几个问题 1.Server dropped:no data 处理办法:网络不通,检查防火墙的udp端口123是否能用,查看服务端的ntpd服务是否启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
[root@ip-192.168.25.10 ~]# ntpdate -d 192.168.25.10 19 Jan 10:24:16 ntpdate[27838]: ntpdate 4.2.6p5@1.2349-o Tue Jun 23 15:38:19 UTC 2020 (1) Looking for host 192.168.25.10 and service ntp host found : ip-192.168.25.10.ap-southeast-1.compute.internal transmit(192.168.25.10) transmit(192.168.25.10) transmit(192.168.25.10) transmit(192.168.25.10) transmit(192.168.25.10) 192.168.25.10: Server dropped: no data server 192.168.25.10, port 123 stratum 0, precision 0, leap 00, trust 000 refid [192.168.25.10], delay 0.00000, dispersion 64.00000 ansmitted 4, in filter 4 ▽ference time: 00000000.00000000 Mon, Jan 1 1900 8:05:43.000 originate timestamp: 00000000.00000000 Mon, Jan 1 1900 8:05:43.000 transmit timestamp: e3b0c156.2402fb9d Tue, Jan 19 2021 10:24:22.140 filter delay: 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 filter offset: 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 delay 0.00000, dispersion 64.00000 offset 0.000000 19 Jan 10:24:24 ntpdate[27838]: no server suitable for synchronization found |
2.Server dropped: strata too high 这个问题一般都是server端ntp.conf中server行配置了网络ntp的服务端url导致,可以收到ntp的包,但是延迟很高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
1 [root@ip-192.168.25.10 ~]# ntpdate -d 192.168.25.10 2 19 Jan 10:33:32 ntpdate[29681]: ntpdate 4.2.6p5@1.2349-o Tue Jun 23 15:38:19 UTC 2020 (1) 3 Looking for host 192.168.25.10 and service ntp 4 host found : ip-192.168.25.10.ap-southeast-1.compute.internal 5 transmit(192.168.25.10) 6 receive(192.168.25.10) 7 transmit(192.168.25.10) 8 receive(192.168.25.10) 9 transmit(192.168.25.10) 10 receive(192.168.25.10) 11 transmit(192.168.25.10) 12 receive(192.168.25.10) 13 192.168.25.10: Server dropped: strata too high 14 server 192.168.25.10, port 123 15 stratum 16, precision -24, leap 11, trust 000 16 refid [192.168.25.10], delay 0.02573, dispersion 0.00000 17 transmitted 4, in filter 4 18 reference time: 00000000.00000000 Mon, Jan 1 1900 8:05:43.000 19 originate timestamp: e3b0c382.6344a1b6 Tue, Jan 19 2021 10:33:38.387 20 transmit timestamp: e3b0c382.670289fb Tue, Jan 19 2021 10:33:38.402 21 filter delay: 0.02574 0.02573 0.02574 0.02573 22 0.00000 0.00000 0.00000 0.00000 23 filter offset: -0.01470 -0.01471 -0.01471 -0.01471 24 0.000000 0.000000 0.000000 0.000000 25 delay 0.02573, dispersion 0.00000 26 offset -0.014712 27 28 19 Jan 10:33:38 ntpdate[29681]: no server suitable for synchronization found |
解决办法就是将服务端也开启ntpdate 然后通过ntpdate链接网络url的ntp服务器,然后在ntp.conf中配置server 127.127.1.0 (记住 不是127.0.0.1 这个无效) 在打开ntpq -p 查看是否转为LOCAL了
1 2 3 4 |
[root@ip-192.168.25.10 ~]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *LOCAL(0) .LOCL. 8 l 11 64 17 0.000 0.000 0.000 |
正确的ntpdate -d 应该是下面的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
1 [root@ip-192.168.25.10 ~]# ntpdate -d 192.168.25.10 2 19 Jan 10:35:25 ntpdate[30125]: ntpdate 4.2.6p5@1.2349-o Tue Jun 23 15:38:19 UTC 2020 (1) 3 Looking for host 192.168.25.10 and service ntp 4 host found : ip-192.168.25.10.ap-southeast-1.compute.internal 5 transmit(192.168.25.10) 6 receive(192.168.25.10) 7 transmit(192.168.25.10) 8 receive(192.168.25.10) 9 transmit(192.168.25.10) 10 receive(192.168.25.10) 11 transmit(192.168.25.10) 12 receive(192.168.25.10) 13 server 192.168.25.10, port 123 14 stratum 6, precision -24, leap 00, trust 000 15 refid [192.168.25.10], delay 0.02574, dispersion 0.00000 16 transmitted 4, in filter 4 17 reference time: e3b0c3eb.878bf296 Tue, Jan 19 2021 10:35:23.529 18 originate timestamp: e3b0c3f3.442fd9c7 Tue, Jan 19 2021 10:35:31.266 19 transmit timestamp: e3b0c3f3.47e920c0 Tue, Jan 19 2021 10:35:31.280 20 filter delay: 0.02574 0.02574 0.02574 0.02576 21 0.00000 0.00000 0.00000 0.00000 22 filter offset: -0.01465 -0.01465 -0.01465 -0.01466 23 0.000000 0.000000 0.000000 0.000000 24 delay 0.02574, dispersion 0.00000 25 offset -0.014652 26 27 19 Jan 10:35:31 ntpdate[30125]: adjust time server 192.168.25.10 offset -0.014652 sec |
ps:以上ip均已做脱敏处理 from:https://www.cnblogs.com/zclinux/p/14296884.html
View Detailsjs实现ctrl+v粘贴上传图片(兼容chrome、firefox、ie11)
原理分析
提取操作:复制=>粘贴=>上传
在这个操作过程中,我们需要做的就是:监听粘贴事件=>获取剪贴板里的内容=>发请求上传
为方便理解下文,需要先明白几点:
我们只能上传网页图(在网页上右键图片,然后复制)和截图(截图工具截的图片,eg:qq截图),不能粘贴上传系统里的图片(从桌面上、硬盘里复制),他们是存在完全不同的地方的。
截图工具截的图与在网页点击右键复制的图是有些不同的,因此处理方式也不一样。
知悉paste event这个事件:当进行粘贴(右键paste/ctrl+v)操作时,该动作将触发名为’paste’的剪贴板事件,这个事件的触发是在剪贴板里的数据插入到目标元素之前。如果目标元素(光标所在位置)是可编辑的元素(eg:设置了contenteditable属性的div。textarea并不行。),粘贴动作将把剪贴板里的数据,以最合适的格式,插入到目标元素里;如果目标元素不可编辑,则不会插入数据,但依然触发paste event。数据在粘贴的过程中是只读的。此段是翻译于w3.org_the-paste-action。
可惜的是,经过试验,发现chrome(当前最新版)、firefox(当前最新版)、ie11对paste事件的实现并不是完全按照w3c来的,各自也有区别(w3c的paste标准也因此只是草案阶段)。
Nginx代理mysql端口
Nginx代理mysql端口
1、安装1.9以上版本nginx并配置stream模块。
stream{
upstream mysqlBackend{
hash $remote_addr consistent;
#原数据库的ip及端口
server 127.0.0.1:3306;
}
server {
#需要路由的端口
listen 13306;
proxy_pass mysqlBackend;
}
}
Centos离线安装openJDK1.8(适用于离线yum安装其它软件)
总体思路
1.在能够联网的机器上使用repotrack工具下载软件所需的所有依赖,并使用createrepo工具创建yum仓库。
2.将yum仓库文件夹打包上传到没有互联网环境的服务器上,配置成本地yum仓库,然后就可以像互联网环境下使用yum命令一样安装软件了(不止适用于openjdk,其它软件也可以用此方法)
8 款免费的 MySQL 数据库建模工具
MySQL Workbench
SQL Power Architect
PDMan
RISE
GenMyModel
DB Designer
dbdiagram.io
Freedgo
Mybatis中强大的resultMap
在Mybatis中,有一个强大的功能元素resultMap。当我们希望将JDBC ResultSets中的数据,转化为合理的Java对象时,你就能感受到它的非凡之处。正如其官方所述的那样:
resultMap元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码。ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。
Spring boot @Scheduled(cron = "* * * * * *") cron表达式详解
“30 * * * * ?” 每半分钟触发任务
“30 10 * * * ?” 每小时的10分30秒触发任务
“30 10 1 * * ?” 每天1点10分30秒触发任务
“30 10 1 20 * ?” 每月20号1点10分30秒触发任务
“30 10 1 20 10 ? *” 每年10月20号1点10分30秒触发任务
“30 10 1 20 10 ? 2011” 2011年10月20号1点10分30秒触发任务
“30 10 1 ? 10 * 2011” 2011年10月每天1点10分30秒触发任务
“30 10 1 ? 10 SUN 2011” 2011年10月每周日1点10分30秒触发任务
“15,30,45 * * * * ?” 每15秒,30秒,45秒时触发任务
“15-45 * * * * ?” 15到45秒内,每秒都触发任务
“15/5 * * * * ?” 每分钟的每15秒开始触发,每隔5秒触发一次
“15-30/5 * * * * ?” 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
“0 0/3 * * * ?” 每小时的第0分0秒开始,每三分钟触发一次
“0 15 10 ? * MON-FRI” 星期一到星期五的10点15分0秒触发任务
“0 15 10 L * ?” 每个月最后一天的10点15分0秒触发任务
“0 15 10 LW * ?” 每个月最后一个工作日的10点15分0秒触发任务
“0 15 10 ? * 5L” 每个月最后一个星期四的10点15分0秒触发任务
“0 15 10 ? * 5#3” 每个月第三周的星期四的10点15分0秒触发任务