首页 文章 精选 留言 我的

精选列表

搜索[动态执行],共10000篇文章
优秀的个人博客,低调大师

Flink Weekly | 每周社区动态更新-20200228

大家好,本文为 Flink Weekly 的第七期,由李劲松整理,主要内容包括:近期社区开发进展,邮件问题答疑以及社区直播和相关技术博客。 社区开发进展 谢亚东增强Apache Flink Web UI的提议[1]拆分成了7个子FLIP,这将大大增强UI的可用性,帮助我们排查问题,了解运行时信息。现在分别正在热火朝天的讨论和投票中,大家可以看下邮件中的Demo,每个子FLIP都有Demo例子来展示。 FLIP-98: 更好的反压检测 [2] FLIP-99: 使得最大异常数可配置 [3] FLIP-100: 添加Task等的重试信息 [4] FLIP-101: 在作业详情页面添加PendingSlots的Tab [5] FLIP-102: 添加更多的TaskManager Metrics [6] FLIP-103: 更好的Taskmanager/Jobmanager日志展示 [7] FLIP-104: 添加更多的Jobmanager Metrics [8] 更多信息请参考: [1]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-75-Flink-Web-UI-Improvement-Proposal-td33540.html[2]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-98-Better-Back-Pressure-Detection-td37893.html[3]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-99-Make-Max-Exception-Configurable-tp37895.html[4]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-100-Add-Attempt-Information-tp37896p37966.html[5]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-101-Add-Pending-Slots-Detail-tp37897p37967.html[6]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-102-Add-More-Metrics-to-TaskManager-tp37898.html[7]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-103-Better-TM-JM-Log-Display-tp37899p38075.html[8]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-104-Add-More-Metrics-to-Jobmanager-tp37901.html Canbin Zheng发起的Kubernetes的架构重构讨论正在进行中,希望引入一个统一的基于monadic-step的编排器架构,该架构对Kubernetes资源构建过程具有更好、更清晰和一致的抽象,适用于客户端和服务端。 [9]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLINK-16194-Refactor-the-Kubernetes-architecture-design-td37931.html 钟葳发起了在SQL DDL中支持Python UDF的讨论,在1.10中,已经支持了UDF的DDL,但是只支持了Java/Scala的,这个讨论旨在支持Python UDF。 [10]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-106-Support-Python-UDF-in-SQL-Function-DDL-td38107.html 李钰和王治江回复了Unaligned checkpoints的讨论,这个提议在于支持一种新的Checkpoint方式,它可以把Checkpoint的间隔大大缩短,减少流计算的E2E时间,也减少Failover的时间。 [11]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-76-Unaligned-checkpoints-td33651.html 李博闻发起了JDBC Catalog FLIP的投票,旨在用Catalog来对接JDBC,从而可以使用到外部数据库的表。 [12]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-93-JDBC-catalog-and-Postgres-catalog-td38208.html 贺小令发起了TableEnvironment接口重构FLIP的投票,旨在重构TableEnvironment的sqlUpdate等接口,提供更为清晰的sql接口,避免缓存SQL问题导致用户的困惑。 [13]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/VOTE-FLIP-84-Improve-amp-Refactor-API-of-TableEnvironment-td38178.html 邮件列表答疑 Outlook在用户邮件列表发出了关于Json格式解析Timestamp时的问题,目前Flink在Json解析时遵循了RFC 3339标准,但是这个标准可能不是用户常用的,用户可能有各种各样的Timestamp字符串形式,解法正在讨论中。 [14]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Re-TIME-TIMESTAMP-parse-in-Flink-TABLE-SQL-API-td38150.html 有两位用户都遇到了Class冲突的问题,这是因为Flink 1.10把客户端的ClassLoader解析顺序调整为了Child优先,这就导致用户的Jar包不能包含Flink框架的classes,比如常见的Calcite、Flink-Planner依赖、Hive依赖等等。用户需要把有冲突classes的jar放到flink-home/lib下,或者调整策略为Parent优先。 [15]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Flink-1-10-exception-Unable-to-instantiate-java-compiler-td38221.html[16]http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Flink-1-10-exception-Unable-to-instantiate-java-compiler-td38221.html 猫猫提出了flink-jdbc-driver的使用问题,引出了目前batch不支持UpsertTableSink,也就是不支持目前的JDBCUpsertSink和HBaseUpsertSink,目前正在支持中。 [17]http://apache-flink.147419.n8.nabble.com/flink-jdbc-driver-mysql-flink1-10-0-td1763.html claylin提出了Flink 1.10 RocksDB优化的问题,正在尝试通过内存和线程来解决。 [18]http://apache-flink.147419.n8.nabble.com/rocksDB-td1785.html 有两位用户都碰到了Flink 1.10 Hive集成的kerberos认证异常,问题还在排查中。 [19]http://apache-flink.147419.n8.nabble.com/Flink-1-10-hive-kerberos-td1751.html[20]http://apache-flink.147419.n8.nabble.com/Hive-Source-With-Kerberos-td1688.html 活动博客文章及其他 Seth发布关于Apache Flink SQL DDL的博客文章“No Java Required: Configured Sources and Sinks in SQL”。 [21]https://flink.apache.org/news/2020/02/20/ddl.html Maximilian Michels和Markos Sfikas发布了Apache Beam和Apache Flink集成的博客文章:“Apache Beam: How Beam Runs on Top of Flink”。 [22]https://flink.apache.org/ecosystem/2020/02/22/apache-beam-how-beam-runs-on-top-of-flink.html Flink 中文社区进行了 Flink 1.10 特别篇直播。 Flink on Zeppelin: 极致体验(1) 入门 + Batch,由 Apache Zeppelin PMC,阿里巴巴高级技术专家章剑锋分享 基于 Flink 的典型 ETL 场景实现,由美团点评高级技术专家买蓉分享 直播回顾: https://ververica.cn/developers/flink-training-course3/ 2 分钟快速订阅 Flink 中文邮件列表 Apache Flink 中文邮件列表订阅流程: 发送任意邮件到 user-zh-subscribe@flink.apache.org 收到官方确认邮件 回复该邮件 confirm 即可订阅 订阅成功后将收到 Flink 官方的中文邮件列表的消息,您可以向 user-zh@flink.apache.org 发邮件提问也可以帮助别人解答问题,动动手测试一下! Tips: Flink Weekly 周报计划每周更新一期,内容涵盖邮件列表中用户问题的解答、社区开发和提议的进展、社区新闻以及其他活动、博客文章等,欢迎持续关注~ 作者介绍: 李劲松,花名之信,Apache Flink Committer,2014 年起专注于阿里内部 Galaxy 流计算框架;2017 年起开始 Flink 研发,主要专注于 Batch 计算、数据结构与类型。

优秀的个人博客,低调大师

如何应对动态的网络犯罪形势

在过去的五年,我们在认识网络犯罪方面取得了长足的进步,但网络组织和民族国家所构成的威胁也在日益增加。 过去的攻击通常在战略上是不成熟的,不协调的,属于机会主义,譬如勒索软件攻击。攻击使用了冒充流媒体服务、银行机构或旅行社的普通网络钓鱼诱饵,这些粗犷的犯罪网络是由罪犯、集团造成的,就像漂浮在海洋上的塑料垃圾一样,它扰乱了生态系统的各个层面,从个人到银行,律师事务所和医院都为之所害。而不管受骗方是谁,赎金支付都是固定利率交易费,并不反映受害人的资金情况。 但是,混乱中出现了秩序。有犯罪集团开始认识到,网络犯罪比传统的实体犯罪更有利可图,危险性更小。这不仅导致了系统性的敲诈勒索,也导致了其更加针对有利可图的目标,比如担心名誉受损的律师事务所,或者害怕业务中断和病人护理受影响的医院。同时,赎金进入了五位数和六位数的范围。 这时候,工具开始出现在民间黑市。恶意软件和像Emotet这样的传递机制已经不是商品了,他们甚至为其他威胁行为者提供恶意软件交付服务。这反映了这样一个事实:犯罪集团在利用财富500强企业进行经营,在市场上建立起很好的有效载荷传输机制,就像一个企业一样运营。这也可以理解为网络工具的商品化。商品化意味着增长,低成本则打开了市场机会。 现在,民族国家正在重新校准雷达,公司发现自己成为贸易战中受损的一部分,各国利用网络博弈来试图平衡经济影响。 网络犯罪组织使用最多的攻击方法是什么?哪种类型的组织风险最大? 没有人能免受网络攻击。但是特定的行业继续在网络犯罪领域里占据上风。虽然银行曾经是将利润联系起来的载体(银行是人们存钱的地方),但现在,犯罪分子正在把其他行业也看作是一场巨大的棋盘。 尽管攻击手段越来越复杂,但更重要的是了解他们的攻击目标。他们明白是什么在驱动一个企业,是什么让他们夜不能寐,是什么让他们按下钓鱼链接。因此,犯罪分子使用网络钓鱼诱饵,经常通过攻击目标自己公司的工具来对付他们,比如利用受信任的供应商,或利用嵌入式工具(如远程管理协议)来提供对关键网络操作的分散访问。 最值得注意的是医院和医疗机构。它们向公众开放,容易受到攻击,并且很难防御。随着物联网以连接医疗图像、静脉注射和患者监测系统的形式渗透到医疗领域,医院将轻松成为目标。 他们很脆弱,不管是担心业务中断、停机时间会影响患者的护理,在医院和医疗机构,攻击关于患者的生死。因此,这些机构愿意付出代价,以避免普遍的勒索软件攻击造成的系统长期关闭。对于犯罪分子来说,病历同样很有价值,可以用来欺骗保险公司。此外,犯罪分子知道,发生数据泄露时,医院也会支付巨额罚款。因此,医院会轻易支付赎金,避免停机,患者账单丢失和监管隐私罚款。 律师事务所和其他商业服务机构(会计,市场营销,咨询等)拥有无与伦比的关键信息访问权限,现在也成为犯罪分子的主要攻击目标。律师事务所控制财务信息,知识产权和其他形式的有价值信息。他们更在意自己的声誉,并担心受到公众攻击的影响。因此,他们会支付赎金。 制造企业则成为数十亿美元欺诈性帐单的受害者。在一个案例中,一家公司面临着以数百万美元的成本关闭一条受感染的生产线的困境。当时董事会决定等待预定的维护时段,但承受了由此引发的网络攻击的后果。 此外,我们在教育,媒体、娱乐以及其他领域里同样看到了攻击的情况。一旦发现水坑,所有食肉动物就知道它们的猎物会聚集在那里。 对想要制定长期风险管理策略的CISO的建议 安全不再是1和0的问题。这不是一个需要解决的It问题,而是需要管理的商业风险问题。 CISO在业务目标设定过程中应该考虑到第0步。这个地理市场有风险吗?这个客户会引起政治关注吗?住房医疗信息是否增加了我们的义务?这些都是需要解决的业务问题,而不是简单地用另一个防火墙或更多用户意识培训来解决的IT问题。 此外,CISO必须成为法律团体的一部分,并平等分担风险责任。安全需要与业务目标保持一致,并和指导委员会制定明确的目标。同时,必须以业务人员可以理解的术语来描述风险。CISO既然知道风险,就要将风险传递给董事会和高管,让他们了解与网络安全有关的义务。 对2020年的预测 攻击将继续朝着高回报,键盘式攻击的方向发展。这意味着旨在阻止恶意软件和凭据收集工具的普通安全控件无法应对这些策略。企业需要投资安全专家,让他们与犯罪分子对抗,并捍卫安全堡垒。 灰色犯罪也将继续发展壮大。用来影响公众思想和选举的策略会被用于改变公司的企业价值。犯罪分子可以编造故事,然后通过社交网络传递这些故事(虚假信息)以此正面或负面地影响股票价值,再利用内幕信息买卖股票以“抢先”交易。与盗窃专有信息相比,这将更难被发现,更难被制止。

优秀的个人博客,低调大师

Flink Weekly | 每周社区动态更新 - 20200114

大家好,本文为 Flink Weekly 的第四期,由 Forward Xu 整理,主要内容包括:Flink 1.10 版本的发布测试,SQL catalog 读取关系数据库 schema 的相关建议以及 Flink Forward 旧金山的演讲邀请。 Flink 开发进展 [Release] 社区仍在测试和修复 Flink 1.10 的错误。您可以在发布燃尽板上进行操作。估计第一个 RC 版本很快就来了 。 https://issues.apache.org/jira/secure/RapidBoard.jspa?rapidView=349&projectKey=FLINK [SQL] Bowen 建议在 Table API 中添加 JDBC 和 Postgres Catalog API。这样,Flink 可以自动创建关系数据库中对应的表。目前,用户需要手动在 Flink 上创建相应的表(包括 schema)。 https://cwiki.apache.org/confluence/display/FLINK/FLIP-92%3A+JDBC+catalog+and+Postgres+catalog http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-FLIP-92-JDBC-catalog-and-Postgres-catalog-tp36505.html [configuration] Xintong 建议更改 Flink 内存配置的一些默认值(FLIP-49),并正在寻求反馈 。 http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/Discuss-Tuning-FLIP-49-configuration-default-values-td36528.html [datastream api] Congxian 建议统一从 statebackends 向 AppendingState 添加“空(null)” 值的处理。建议的原因是使所有 statebackends 拒绝“空(null)”值。 http://apache-flink-mailing-list-archive.1008284.n3.nabble.com/DISCUSS-Make-AppendingState-add-refuse-to-add-null-element-tp36493.html 需要注意的一些缺陷 由于在发布测试,因此有很多活动,但是对于已经发布的版本,没有发现任何新的显著错误。 活动 / 博客文章 / 其他 Flink Forward 旧金山的演讲邀请即将结束,但是您仍然有机会将演讲提交给该演讲者(可能只有)北美的 Apache Flink 社区会议。如有疑问或如果您不确定是否要提交参与,请随时与 Konstantin 联系。 https://www.flink-forward.org/sf-2020 [即将举行的聚会] 1月18日,Preetdeep Kumar 将分享一些基本的 Flink DataStream processing API,然后进行动手演示。这将是在线活动。在会议链接中可以查看更多详细信息。 https://www.meetup.com/Hyderabad-Apache-Flink-Meetup-Group/events/267610014/ 1月22日 Konstantin 的同事 Alexander Fedulov 将在马德里的 Apache Flink 聚会上使 Flink 进行欺诈检测。 https://www.meetup.com/Meetup-de-Apache-Flink-en-Madrid/events/267744681/ 中文邮件问题答疑汇总 Flink 的 savepoint 为什么要设置成手动的?的问题解答: http://apache-flink.147419.n8.nabble.com/flink-savepoint-checkpoint-td1229.html Flink 消费 Kafka 没有数据问题的问题解答: http://apache-flink.147419.n8.nabble.com/flink-Kafka-td1461.html 关于 Flink 集群中调用 dubbo 服务的咨询: http://apache-flink.147419.n8.nabble.com/flink-dubbo-td1467.html 关于 Flink Plan Visualizer 什么时候会更新成1.9的样式的问题,tison 已经抄送给 Flink WebUI 重构的 Manager: http://apache-flink.147419.n8.nabble.com/Flink-Plan-Visualizer-1-9-td1404.html#a1429 Flink 的每条数据既然都做了 checkpoint,做成全局分布式一致性快照,那还需要本地 state干啥呢?的问题解答: http://apache-flink.147419.n8.nabble.com/checkpoint-state-td1122.html 关于 Flink 遇到 valueState 自身的 NPE 的问题解答: http://apache-flink.147419.n8.nabble.com/flink-valueState-NPE-td1447.html#a1459 关于流处理任务失败该如何追回之前的数据的问题解答: http://apache-flink.147419.n8.nabble.com/-td1016.html 关于 Flink 是否可以通过代码设置 hadoop 的配置文件目录的问题解答: http://apache-flink.147419.n8.nabble.com/flink-hadoop-td1445.html 关于 Flink 算子状态查看的问题解答: http://apache-flink.147419.n8.nabble.com/flink-td1441.html 关于疑似 ParquetTableSource Filter Pushdown bug 的问题解答: http://apache-flink.147419.n8.nabble.com/Re-ParquetTableSource-Filter-Pushdown-bug-tt1439.html 关于 Flink 1.10 版本连接 hive 报错的问题解答: http://apache-flink.147419.n8.nabble.com/flink1-10-hive-tt336.html 关于 Flink 不同 StateBackend ProcessWindowFunction 的差别的问题解答: http://apache-flink.147419.n8.nabble.com/FLINK-StateBackend-ProcessWindowFunction-tt1418.html#a1419 关于 Jobgraph 生成的问题解答: http://apache-flink.147419.n8.nabble.com/Re-jobgraph-tt1426.html 关于注册 table 时 catalog 无法变更的问题解答: http://apache-flink.147419.n8.nabble.com/table-catalog-tt1417.html#a1425 关于 Flink sql confluent schema avro topic 注册成表的问题解答: http://apache-flink.147419.n8.nabble.com/flink-sql-confluent-schema-avro-topic-tt1264.html 使用 Flink SQL 时,碰到的【Window can only be defined over a time attribute column】的问题解答: http://apache-flink.147419.n8.nabble.com/Flink-SQL-Window-can-only-be-defined-over-a-time-attribute-column-tt1407.html 关于如何获取算子处理一条数据记录的时间的问题解答: http://apache-flink.147419.n8.nabble.com/-tt1357.html#a1412

优秀的个人博客,低调大师

动态给容器指定 Java 启动参数

在做 Java 程序容器化时都会遇到一个问题,ENTRYPOINT ["java", "$JAVA_OPTS", "-jar", ...] 这样的写法 $JAVA_OPTS 就是个字符串无法在运行时展开。为了不把参数硬编码到容器里,每次调整参数重新构建镜像,可以有多种方案,先介绍几种不够好的方案。 ENTRYPOINT java $JAVA_OPTS -jar ...,这种方式的问题是 java 不是容器主进程(至于为什么要保证 java 是主进程,又是一个话题,是容器化基本最佳实践之一); ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar ..."],这种写法其实等价于上面一种方式,上面一种方式在运行时就是以 /bin/sh -c "java $JAVA_OPTS -jar ..." 方式运

优秀的个人博客,低调大师

iOS静/动态库开发支持bitcode

bitcode是什么 Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store. 根据官方文档的解释,bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序

优秀的个人博客,低调大师

ajax异步加载jqgrid之动态创建

之前写过一篇过于ajax异步加载jqgrid的文章,那个只是一个特殊的情况,如果创建不同数据库表的jqgrid,必须分别写servlet,dao层和连接池,很麻烦,今天我写了一个万能的写法,客官只要在前台js中写入表格名称和字段名称即可实现功能! 下面就是代码实例,关于jqgrid,ajax的介绍这里暂时不多说,有不懂的可以参考我之前的文章! 代码实例 JSP层 <%@ page contentType="text/html;charset=UTF-8" language="java" %> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>定义>类型</title> <link rel="stylesheet" href="css/homepage.css"> <link type="text/css" rel="stylesheet" href="css/bootstrap.min.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/font-awesome.min.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/ui.jqgrid.css"> <link type="text/css" rel="stylesheet" href="js/JqGrid/css/jquery-ui.min.css"> </head> <body> <div class="headerColor"> <span>定义>类型</span> </div> <div class="row col-sm-12"> <div class="frame_border"> <div class="titleColor"> <span>已定义模拟量测点信息</span> <div id="typeDefines"> <table id="typeDefine"></table> <div id="typeDefinePager"></div> </div> </div> </div> </div> <script type="text/javascript" src="js/JqGrid/js/jquery.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/jquery.jqGrid.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/bootstrap.min.js"></script> <script type="text/javascript" src="js/JqGrid/js/grid.locale-en.js"></script> <script type="text/javascript" src="js/JqGrid/js/grid.locale-cn.js"></script> <script type="text/javascript" src="js/JqGrid/js/jquery.jqgrid.typedefine.js"></script> <script type="text/javascript"> jf_initJqgrid(); function jf_initJqgrid(){ $("#typeDefine").jqGridTypeDefine({ pager_selector:"#typeDefinePager",//分页 height:"360",//表格高度 width:$("#typeDefines"),//表格宽度 where:{},//初始化查询条件 wherestring:{}, oper:"jqGridCre", tableid : "kj_typedefine", }); } </script> </body> </html> JavaScript篇 ;(function($){ $.fn.jqGridTypeDefine = function(options){ //获取jquery对象 var grid_selector = this; var initDate = "{oper: ""," + "height: ""," + "width: ""," + "pager_selector: "typeDefinePager"," + "where: ""," + "wherestring: {}," + "fileds: ["id", "property", "name", "sensortype", "unit","highvalue"]," + "table:"kj_typedefine"}"; $.ajax({ url:"MyServlet", async:true, //是否为异步请求 cache:false, //是否缓存结果 type:"GET", dataType:"json", data :{ "data" : initDate, }, success : function(data){ for(var i=0;i<=data.length;i++){ $("#typeDefine").jqGrid('addRowData',i+1,data[i]); } } }) switch(options.oper){ case 'jqGridCre':jqgridCre(initDate,grid_selector); break; case 'jqGridFre':jqGridFre(initDate,grid_selector); break; } $('[id^=jqgh_typeDefine_]').css("height","20px"); } function jqgridCre(initDate,grid_selector) { jQuery(grid_selector).jqGrid({ colNames:['标识符','属性', '名称','传感器种类','单位/0态名称','高值/1态名称'], colModel:[ { name:'id', index:'id', width: 100, },{ name:'property', index:'property', width: 100, },{ name:'name', index:'name', width: 100, },{ name:'sensortype', index:'sensortype', width: 100, },{ name:'unit', index:'unit', width: 100, },{ name:'highvalue', index:'highvalue', width: 100, } ], sortname : "id", sortorder : "desc", viewrecords : true, shrinkToFit : true, width: 1645, height: 500, rowNum : 20, rowList : [ 10,15,30 ], datatype: 'text', pager: "#typeDefinePager", onSelectRow:function(rowid){ grid_selectRow = $(grid_selector).jqGrid("getRowData",rowid); }, }); } })(jQuery); servlet层 package com.test.servlet; import com.test.entity.MyEntity; import com.test.service.MyService; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class MyServlet extends HttpServlet { MyService service = new MyService(); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.setContentType("text/html"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); String jqgridData = request.getParameter("data"); MyEntity myEntity = new MyEntity(); myEntity.setJqgridData(jqgridData); String str = service.getJqgridData(myEntity); response.getWriter().print(str); } } service层 package com.test.service; import com.test.dao.MyDao; import com.test.entity.MyEntity; public class MyService { MyDao myDao = new MyDao(); public String getJqgridData(MyEntity myEntity) { String jqgridData = myDao.selectJqgridData(myEntity); return jqgridData; } } dao层 package com.test.dao; import com.test.entity.MyEntity; import com.test.entity.SecondData; import com.test.util.MySQLFactory; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class MyDao { public String selectJqgridData(MyEntity myEntity) { String str = myEntity.getJqgridData(); String data = ""; try { JSONObject obj = new JSONObject(str); String oper = String.valueOf(obj.get("oper")); String fileds = String.valueOf(obj.get("fileds")).replace(""","") .replace("[","") .replace("]",""); String table = String.valueOf(obj.get("table")); String sql = String.format( "select %s from %s ",fileds,table ); System.out.println(sql); data = MySQLFactory.queryData(sql); } catch (JSONException e) { e.printStackTrace(); } return data; } } entity层 package com.test.entity; public class MyEntity { private String jqgridData; public MyEntity() { } public MyEntity(String jqgridData) { this.jqgridData = jqgridData; } public String getJqgridData() { return jqgridData; } public void setJqgridData(String jqgridData) { this.jqgridData = jqgridData; } } 连接池 package com.test.util; import java.sql.*; public class MySQLFactory { static final String DRVIER = "com.mysql.jdbc.Driver"; static final String URL = "jdbc:mysql://localhost:3306/mysql"; static final String USERNAMR = "root"; static final String PASSWORD = "root"; private static Connection conn = null; public static Connection getConnection(){ try { Class.forName(DRVIER); conn = DriverManager.getConnection(URL, USERNAMR, PASSWORD); System.out.println("成功连接数据库"); } catch (ClassNotFoundException e) { throw new RuntimeException("class not find !", e); } catch (SQLException e) { throw new RuntimeException("get connection error!", e); } return conn; } public static void executeSQL(String sql) { Statement stat = null; try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return; } try { stat.execute(sql); } catch (Exception e) { e.printStackTrace(); return; } try { if (stat != null) stat.close(); if (conn != null) conn.close(); } catch (Exception e) { e.printStackTrace(); } } public static String queryNoPage(String sql) { Connection conn = null; Statement stat = null; ResultSet rows = null; StringBuffer buff = new StringBuffer(); try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return "[]"; } try { rows = stat.executeQuery(sql); //得到数据集的列数 ResultSetMetaData rsmd = rows.getMetaData(); int colCount = rsmd.getColumnCount(); boolean first = true; buff.append("["); while (rows.next()) { String rowStr = ""; for (int i = 1; i <= colCount; i ++ ) { if (i>1) rowStr += ","; String tempValue = rows.getString(i); rowStr += String.format("%s", tempValue); } rowStr = String.format(""%s"", rowStr); if (first) first = false; else buff.append(","); buff.append(rowStr); } buff.append("]"); }catch (Exception e) { e.printStackTrace(); return "[]"; }finally { try { rows.close(); stat.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return buff.toString(); } public static String queryData(String sql){ Connection conn = null; Statement stat = null; ResultSet rows = null; StringBuffer buff = new StringBuffer(); try { conn = getConnection(); stat = conn.createStatement(); } catch (Exception e) { e.printStackTrace(); return "[]"; } try { rows = stat.executeQuery(sql); //得到数据集的列数 ResultSetMetaData rsmd = rows.getMetaData(); int colCount = rsmd.getColumnCount(); buff.append("["); while (rows.next()) { String rowStr = ""; buff.append("{"); for (int i = 1; i <= colCount; i ++ ) { if (i>1) rowStr += ","; String name = rsmd.getColumnName(i); String tempValue = rows.getString(i); rowStr += String.format(""%s":"%s"", name,tempValue); } rowStr = String.format("%s", rowStr); buff.append(rowStr); buff.append("},"); } buff.append("]"); } catch (SQLException e) { e.printStackTrace(); return "[]"; } String str = buff.toString().replace(",]","]"); return str; } } 效果展示

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册