一、apache calcite
简介: sql解析工具
- 解析sql
//从文件中读取sql并解析,方言是mysql @Test public void sqlParseTest() { SqlParser parser; try { parser = SqlParser.create( new InputStreamReader( new FileInputStream( new File("C:\\Users\\Administrator\\Desktop\\temp2.txt")), "gbk"), SqlParser.Config.DEFAULT.withLex(Lex.MYSQL) .withConformance(SqlConformanceEnum.MYSQL_5)); SqlSelect node = (SqlSelect) parser.parseStmt(); System.out.println(node); } catch (Exception e) { e.printStackTrace(); } }
二、apache commons-text
简介:apache 字符串处理工具包
- StringEscapeUtils 转义使用,像xml html java 都会有一些特殊字符,需要转义和反转义,像xml 中的<和>
public static void main(String[] args) { // 转义成Unicode编码 System.out.println("转成Unicode编码:" + StringEscapeUtils.escapeJava("中国")); // 打印结果:\u4E2D\u56FD // 转义Unicode编码为文字 System.out.println("Unicode编码转成中文:" + StringEscapeUtils.unescapeJava("\\u4E2D\\u56FD")); // 打印结果:中国 // 转义xml System.out.println("转义XML:" + StringEscapeUtils.escapeXml11("<name>中国</name>")); // 反转义xml System.out.println("反转义XML:" + StringEscapeUtils.unescapeXml("<name>中国</name>")); }
三、apache hadoop
简介:大数据
-
安装错误,在格式化hdfs时。
JAVA_HOME: /user/local/jdk6 /home/hadoop/user/local/hadoop/bin/hadoop: line 321: /user/local/jdk6/bin/java: No such file or directory /home/hadoop/user/local/hadoop/bin/hadoop: line 391: /user/local/jdk6/bin/java: No such file or directory /home/hadoop/user/local/hadoop/bin/hadoop: line 391: exec: /user/local/jdk6/bin/java: cannot execute: No such file or directory [hadoop@localhost ~]$ echo $JAVA_HOME
原因:虽然我的 J A V A H O M E 是对的,但是它读取的却是 JAVA_HOME是对的,但是它读取的却是 JAVAHOME是对的,但是它读取的却是HADOOP_HOME/conf/hadoop-env.sh中的JAVA_HOME变量值,这个值可能是在安装hadoop时获取的系统 J A V A H O M E 值,但当时我的 JAVA_HOME值,但当时我的 JAVAHOME值,但当时我的JAVA_HOME的值配错了,后来改过,但这个变量只初始化一次,所以他总是用错误的JAVA_HOME的值。改正hadoop-env.sh中的JAVA_HOME的值后恢复正常。
-
错误
Name node is in safe mode
的解决方法
用户可以通过hadoop dfsadmin -safemode value
来操作安全模式,参数value的说明如下:- enter - 进入安全模式
- leave - 强制NameNode离开安全模式
- get - 返回安全模式是否开启的信息
- wait - 等待,一直到安全模式结束。
四、 apache log4j
简介:日志框架
-
动态设置配置文件路径
PropertyConfigurator.configure("D:/log4j.properties");
-
指定包配置
log4j.rootLogger=info,Console,All,Warn,Error log4j.logger.com.test.controller.TestController=info
指定包配置会继承重写rootLogger,实际上TestController是这个log4j.logger.com.test.controller.TestController=info,Console,All,Warn,Error
-
OFF 日志级别
OFF:关闭日志 -
log4j2 filter
<Filters> <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="NEUTRAL" /> <ThresholdFilter level="WARN" onMatch="DENY" onMismatch="ACCEPT" /> </Filters>
- 示例1:
logger.info("info")
因为level=“INFO”,匹配,然后判断 onMatch,因为其值为ACCEPT,则执行该规则,不在执行过滤器2; - 示例2:
logger.debug("info")
过滤器1,因为level=“INFO”,不匹配,然后判断onMismatch,因为其值为NEUTRAL,所以调用过滤器2来处理;
过滤器2,因为level=“WARN”,不匹配,然后判断onMismatch,因为其值为ACCEPT,所以执行规则;
总结如下:
- 规则只能被执行一次,一旦某个过滤器的结果执行了规则,就不会在走后面的过滤器。
- level:当前级别及以上,代码中的级别为其值及以上时匹配
- onMatch:匹配时,会判断该属性
- ACCEPT :执行规则,不在调用后面过滤器
- DENY:不执行规则,不在调用后面过滤器
- NEUTRAL:不执行规则,调用后面过滤器
- onMismatch:不匹配时,会判断该属性
- ACCEPT :执行规则,不在调用后面过滤器
- DENY:不执行规则,不在调用后面过滤器
- NEUTRAL:不执行规则,调用后面过滤器
- 示例1:
五、apache lucene
简介:全文检索引擎
-
点号问题
待搜索文本:2020-09-15 09:45:01,090 ERROR 22587 --- [http-nio-8085-exec-77] c.z.i.c.GlobalExceptionHandler : For input string: "688.0000" java.lang.NumberFormatException
查询:message:NumberFormatException 查不到结果
查询:message:*NumberFormatException 能查到结果 -
查询受分词策略影响,有的不支持正则,通配符等
六、apache mybatis
简介:dao框架
-
打印sql:
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
-
insert 返回id
<insert id="insert" parameterType="com.zhen.mq.shop.model.GtUcOrderNotice" useGeneratedKeys="true" keyProperty="id">
-
MyBatis 提供了一个全局属性mapUnderscoreToCamelCase,通过配置这个属性为true可以自动将以下画线方式命名的数据库列映射到Java对象的驼峰式命名属性中。
六、apache velocity
简介:后端模板渲染框架
-
获取session中的属性
$session.getAttribute("属性名");
-
基本用法
Velocity.init(); VelocityContext context = new VelocityContext(); context.put( "name", new String("Velocity") ); Template template = null; try{ template = Velocity.getTemplate("mytemplate.vm"); }catch( ResourceNotFoundException rnfe ){ }catch( ParseErrorException pee ){ }catch( Exception e ){ } StringWriter sw = new StringWriter(); template.merge( context, sw );
七、apache maven
简介:java项目构建工具
-
上传jar
-
setting.xml文件中增加server项
<server> <id>private aliyun</id> <username>625e7bb34e333f0281125901</username> <password>XdItwf26J2MN</password> </server>
-
项目pom.xml中增加如下配置,指示应该上传到那个库,pom.xml中
<version>0.0.1-SNAPSHOT</version>
,-SNAPSHOT决定了会上传到快照库<distributionManagement> <!--快照版本上传库--> <snapshotRepository> <id>private aliyun</id> <name>private aliyun</name> <url> https://packages.aliyun.com/maven/repository/2218701-snapshot-k6QKrt</url> </snapshotRepository> <!--release版本上传库--> <repository> <id>nexus-releases</id> <name>Nexus Release Repository</name> <url>http://127.0.0.1:8080/nexus/content/repositories/releases/</url> </repository> </distributionManagement>
-
项目中运行
mvn clean install org.apache.maven.plugins:maven-deploy-plugin:2.8:deploy -DskipTests
-
-
settings.xml存在于两个地方
- 安装的地方:${M2_HOME}/conf/settings.xml
- 用户的目录:${user.home}/.m2/settings.xml
-
relativePath
MAVEN构建jar包时候查找顺序:relativePath元素中的地址–本地仓库–远程仓库<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
-
<resources>中的<filtering>
有的时候,资源文件中存在变量引用,可以使用标签指定是否替换资源中的变量。变量的来源为pom文件中的标签中定义的变量。也可以在中定义过滤器资源。<!--读取所有文件,且除a.txt外其余文件替换变量--> <resources> <!--读取除a.txt外的所有文件且替换变量--> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <!--过滤所有文件,除了a.txt--> <excludes> <exclude>a.txt</exclude> </excludes> </resource> <!--只读取除a.txt文件且不替换替换变量--> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <!--过滤所有文件,只包含a.txt--> <includes> <include>a.txt</include> </includes> </resource> </resources>
-
<pluginManagement>
pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。 -
jar查找顺序
settings_mirror>local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > central -
常用命令
- mvn compile,编译类文件
- mvn install,包含mvn compile,mvn package,然后上传到本地仓库
- mvn deploy,包含mvn install,然后,上传到私服
-
mirrorOf
- repo3:匹配repo3仓库
- repo1,repo2,*,!repo3:匹配repo1,repo2、所有仓库,repo3除外
- external:*: 匹配本地库之外的全部库
- * :匹配所有仓库
-
编译错误
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tECA4PZk-1684720738107)(en-resource://database/2266:1)]
错误:在src/test/java源文件夹下测试相关的包是找不到的,其他的包是正常的。
原因:如下图,在src/test/java 下是不包含测试源的,所以无法找到测试包,改为yes即可。
什么样的包为测试源,答案是,在maven项目中包含test的依赖定义为测试源。所以改正方案有两种:- 下图改为yes
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4Thp70e-1684720738108)(en-resource://database/2268:1)]
下面代码是上图的一个等价配置文件,位于项目根目录下的.classpath中。即为yes<classpathentry kind="src" output="target/test-classes" path="src/test/java"> <attributes> <attribute name="optional" value="true"/> <attribute name="maven.pomderived" value="true"/> <attribute name="test" value="true"/> </attributes> </classpathentry>
- 去掉pom.xml 中的test定义。更正确的做法是第一种,因是有其意义的。
- 下图改为yes
-
依赖问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ogaZRwa5-1684720738109)(en-resource://database/2270:1)]
一直没找到1.2.0版本在哪里定义的,eclipse dependency hierarchy 里也找不到,最后发现在<dependencyManagement> <dependencies> <!-- 这个定义又依赖了spring-boot-dependencies,其中有对spring-plugin-core版本的定义 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot</artifactId> <version>${version-mybatis-spring-boot}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
-
scope的作用和用法
值 作用 compile 默认就是compile,编译时需要,会被打包 test 仅仅参与测试相关的工作,编译时不需要,不会被打包 provided 不会被打包,编译时需要,运行时则由外部提供,像tomcat中运行的项目,servlet包由tomcat提供。开发时就可以定义为provided runntime 会被打包,编译时不需要,运行时需要,这种一般是动态加载其中的类,像Class.forName(“com.mysql.jdbc.Driver”) system 不会被打包,编译时需要,由systemPath属性包所在路径提供
八、apache tomcat
web 服务器
- jsp文件
tomcat有一个work目录,里面存放了页面的缓存,访问的jsp都会编译,编译后的文件都会存储在work目录下。当访问jsp文件的时候,都会从这个缓存里找编译后的jsp对应的class文件。所以当清空了work目录后,该过程将会从新来过。