ThreadLocal是我们最熟悉的一个多线程工具类,它是用来实现多线程场景中每个线程可以拥有自己的变量对象,而且不受其他线程的影响,做到数据隔离。
如果按照我们平时开发的习惯和思路,想要实现上述功能,大概会写出下面的代码,写一个工具类
1234567891011121314151617181920212223242526272829public class MyThreadLocal { private MyThreadLocal(){ } //存放每个thread的私有变量,key为thread自己 private static final Map...
今天开发hive数据迁移遇到个问题,从旧库导出来的csv文件死活导入不进新表中,导入语句如下:
1LOAD DATA INPATH '/user/upload/xiaomifengceshi.csv' OVERWRITE INTO TABLE default.dm_fity PARTITION (inc_day=20190814);
后来研究发现:原来是导出的时候所选择的csv分隔符为’,‘(如下图:)
,但是新建的hive表的默认分割符,hive使用不可见的字符作为分割符,如下表
分隔符
描述
\n
行分隔符
^A
字段分隔符,八进制表示为\001,
^B
a...
这几天旧项目运维时发现曾经写的hibernate监听器很有意思,混合利用了工厂模式和观察者模式。所以特意记录一下
hibernate4的监听器注册方式不同于hibernate3在cfg.xml内进行注册的方式,而是新增了一个监听器注册类:org.hibernate.event.service.spi.EventListenerRegistry,注册方式为:
1234567891011121314151617@Componentpublic class HandleEnvetListener { //注册监听器 @Autowired private SessionFa...
etl抽取oracle数据到hive库中的时候,oracle表中如果有换行符如:‘\n\r’,会造成当前行的数据错位。
原来是因为hive默认的存储方式是textfile,这种方式不支持存储换行符。
方案一、替换这些特殊字符:
1regexp_replace(t.test, '\n|\t|\r', '')
方案二、修改表的存储格式为:parquet
12345678910drop table if exists test_table;create table test_table( create_by string comment '', create_time date commen...
目前前后端分离的开发方式都是需要前端应用跨域访问后端服务器。这里记录下平时开发中用到的三种服务器支持跨域的方式。浏览器支持跨域的方式后面再讲。
先来了解下跨域的主流方式:
CORS:全称”跨域资源共享”(Cross-origin resource sharing)。
CORS需要浏览器和服务器同时支持,才可以实现跨域请求,目前几乎所有浏览器都支持CORS,IE则不能低于IE10。
一:springMVC版本低于4.2的war包部署至jboss、jetty、tomcat在web.xml内加入处理跨域的过滤器(需要先引入jar包):
12345678910111213141516171819...
写在前面传统的servlet处理request请求是,会自动帮我们封装get请求、post且Content-Type为application/x-www-form-urlencoded请求参数至request parameter map。但是当Content-Type为其他类型时,需要基于servlet的框架比如struts、spring来帮我们封装,不按的话得我们自己获取请求流来处理。
之所以会这样,是因为:Content-Type不是application/x-www-form-urlencoded时数据格式不固定,不一定是key=value对的方式,所以服务器无法知道具体的处理方式...
最近开发的人员搜索功能使用到了ElasticSearch(ES),所以把自己学到的东西记录下来
介绍ES是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 ES并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
实时分析的分布式搜索引擎。
可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
经过两三天时间的琢磨,大概明白了ES的表面运作流程,ES除了上述特征之外,他提供服务的方式是RESTful web接口...
在mybatis的mapping内进行字符串比较应该使用以下方法:
<if test='type=="y"'>
and status = 1
</if>
或者
<if test="type == 'y'.toString()">
and status = 1
</if>
不能使用这种写法<if test="type == 'y'">,因为tset内是ognl表达式,’Y’在java内被认...
mybatis占位符分为#{}和${}
#{}是利用jdbc的预编译(PreparedStatement),一个#{}会被解析为一个占位符?。它可以指定变量的类型,比如:#{empCode,jdbcType=VARCHAR}或#{year,jdbcType=DECIMAL},
${}是一个纯粹的String替换,把变量的值直接替换在当前位置
比如: select emp_id from user where code=#{code,jdbcType=VARCHAR}在log内打印出来为sql为:Preparin...
ORA-01722: invalid number最常见的原因就是因为我们在条件筛选时写了文本格式的(varchar2)字段与数字进行对比,Oracle的字段类型隐式转换调用了to_number函数,当字段内有非数字的值时,就会报这个错误。比如下面两个sql:
1select * from TM_hrmis_USER U WHERE U.EMP_CODE=592876
1select * from TM_hrmis_USER U WHERE U.EMP_CODE=592876 and u.emp_name='592876'
首先emp_code这个字段...