apache 工具使用杂记

一、apache calcite

简介: sql解析工具

  1. 解析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 字符串处理工具包

  1. 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("&lt;name&gt;中国&lt;/name&gt;"));
    }
    
三、apache hadoop

简介:大数据

  1. 安装错误,在格式化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的值后恢复正常。

  2. 错误Name node is in safe mode的解决方法
    用户可以通过hadoop dfsadmin -safemode value 来操作安全模式,参数value的说明如下:

    • enter - 进入安全模式
    • leave - 强制NameNode离开安全模式
    • get - 返回安全模式是否开启的信息
    • wait - 等待,一直到安全模式结束。
四、 apache log4j

简介:日志框架

  1. 动态设置配置文件路径

      PropertyConfigurator.configure("D:/log4j.properties");
    
  2. 指定包配置

    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

  3. OFF 日志级别
    OFF:关闭日志

  4. 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,所以执行规则;
      总结如下:
    1. 规则只能被执行一次,一旦某个过滤器的结果执行了规则,就不会在走后面的过滤器。
    2. level:当前级别及以上,代码中的级别为其值及以上时匹配
    3. onMatch:匹配时,会判断该属性
      • ACCEPT :执行规则,不在调用后面过滤器
      • DENY:不执行规则,不在调用后面过滤器
      • NEUTRAL:不执行规则,调用后面过滤器
    4. onMismatch:不匹配时,会判断该属性
      • ACCEPT :执行规则,不在调用后面过滤器
      • DENY:不执行规则,不在调用后面过滤器
      • NEUTRAL:不执行规则,调用后面过滤器
五、apache lucene

简介:全文检索引擎

  1. 点号问题
    待搜索文本:

    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 能查到结果

  2. 查询受分词策略影响,有的不支持正则,通配符等

六、apache mybatis

简介:dao框架

  1. 打印sql:

     <settings>
           <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
    
  2. insert 返回id

    <insert id="insert" parameterType="com.zhen.mq.shop.model.GtUcOrderNotice" useGeneratedKeys="true" keyProperty="id">
    
  3. MyBatis 提供了一个全局属性mapUnderscoreToCamelCase,通过配置这个属性为true可以自动将以下画线方式命名的数据库列映射到Java对象的驼峰式命名属性中。

六、apache velocity

简介:后端模板渲染框架

  1. 获取session中的属性

    $session.getAttribute("属性名");
    
  2. 基本用法

    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项目构建工具

  1. 上传jar

    1. setting.xml文件中增加server项

      <server>
          <id>private aliyun</id>
          <username>625e7bb34e333f0281125901</username>
          <password>XdItwf26J2MN</password>
      </server>
      
    2. 项目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>
      
      
    3. 项目中运行 mvn clean install org.apache.maven.plugins:maven-deploy-plugin:2.8:deploy -DskipTests

  2. settings.xml存在于两个地方

    • 安装的地方:${M2_HOME}/conf/settings.xml
    • 用户的目录:${user.home}/.m2/settings.xml
  3. 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>
    
  4. <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>
    
  5. <pluginManagement>
    pluginManagement一般是用来在父POM中定义,提供给子POM使用,子POM也可以覆盖这个定义,而且你在父POM中定义了版本之后,子模块中直接应用groupId和artifactId,而不用指定版本,同时也方便统一管理;而在父POM中的pluginManagement并不会介入到Maven的生命周期。

  6. jar查找顺序
    settings_mirror>local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > central

  7. 常用命令

    • mvn compile,编译类文件
    • mvn install,包含mvn compile,mvn package,然后上传到本地仓库
    • mvn deploy,包含mvn install,然后,上传到私服
  8. mirrorOf

    • repo3:匹配repo3仓库
    • repo1,repo2,*,!repo3:匹配repo1,repo2、所有仓库,repo3除外
    • external:*: 匹配本地库之外的全部库
    • * :匹配所有仓库
  9. 编译错误
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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定义。更正确的做法是第一种,因是有其意义的。
  10. 依赖问题
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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>
    
  11. scope的作用和用法

    作用
    compile默认就是compile,编译时需要,会被打包
    test仅仅参与测试相关的工作,编译时不需要,不会被打包
    provided不会被打包,编译时需要,运行时则由外部提供,像tomcat中运行的项目,servlet包由tomcat提供。开发时就可以定义为provided
    runntime会被打包,编译时不需要,运行时需要,这种一般是动态加载其中的类,像Class.forName(“com.mysql.jdbc.Driver”)
    system不会被打包,编译时需要,由systemPath属性包所在路径提供
八、apache tomcat

web 服务器

  1. jsp文件
    tomcat有一个work目录,里面存放了页面的缓存,访问的jsp都会编译,编译后的文件都会存储在work目录下。当访问jsp文件的时候,都会从这个缓存里找编译后的jsp对应的class文件。所以当清空了work目录后,该过程将会从新来过。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值