zoukankan      html  css  js  c++  java
  • JAVA学习笔记

    基础知识

    1、classpath*:和classpath:的区别

    在SPRING开发的时候我们引入不同的JAR包,如果在不同的JAR中有相同的文件:datasource.xml,那么他们之间的区别是:

    1. classpath*:将所有的datasource.xml都加载进来。
    2. classpath:只加载按照顺序找到的第一个datasource.xml。

    另外,classpath*:只能用在配置文件中,而不能作为getResource的参数。


    2、读取文件

    在很多时候文件路径是个比较头疼的问题,如果直接写死的话换个地方就运行不了了,那么比较简单的办法是用getResourcegetResourceAsStream,基本上能满足需求了:

    1. 以'/'开头的话则从classpath开始查找。
    2. 不以'/'开头的话以当前目录开始查找。

    另外如果是ServletContext.getResourceAsStream则默认从WebAPP下查找。


    3、maven中scope的作用

    在maven中有下面几种范围:

    1. compile:编译时使用,并且会被打入目标包中(默认值)。
    2. provided:容器会提供,不必打到jar包里面(比如写代码的时候需要Servlet API,但是没必要打到war包里面)。
    3. runtime:在运行和测试的时候需要。
    4. test:测试时需要。
    5. system:和provider类似,区别时要指定一个本地的jar包。

    最近在做jstorm上的应用,提交任务的时候报错:有多个default.yaml文件。将jstorm对应的jar改成provided即可解决。


    4、在非web应用中初始化日志

    周所周知在web应用中一般都通过Log4jConfigListener来进行初始化,首先会从context-param中获取到参数,然后进行设置:

    public static void initLogging(String location, long refreshInterval) throws FileNotFoundException {
    	String resolvedLocation = SystemPropertyUtils.resolvePlaceholders(location);
    	File file = ResourceUtils.getFile(resolvedLocation);
    	if (!file.exists()) {
    		throw new FileNotFoundException("Log4j config file [" + resolvedLocation + "] not found");
    	}
    	if (resolvedLocation.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
    		DOMConfigurator.configureAndWatch(file.getAbsolutePath(), refreshInterval); // XML格式的配置文件
    	} else {
    		PropertyConfigurator.configureAndWatch(file.getAbsolutePath(), refreshInterval);// properties格式的配置文件
    	}
    }
    

    那么简单了,在非web的应用中我们调用DOMConfigurator或者PropertyConfigurator进行设置。


    5、dtd和xsd

    很多配置文件都是用xml来描述,然后文件的格式一般由dtd或者xsd来描述(主要是用来描述元素和标签),他们的区别是:

    1. dtd:不支持扩展和命名空间。
    2. xsd:可扩展、支持命名空间、支持属性组。

    运行应用的机器并不总是可以联网的,如果不联网的情况下在spring的配置文件中配置http://www.springframework.org/schema/beans/spring-beans.xsd可能会有问题,解决方法也很简单,在spring的jar包中其实已经有对应的xsd文件,引用即可:classpath:/org/springframework/beans/factory/xml/spring-beans-2.5.xsd。


    6、jvm常用参数设置

    最近经常遇到PermGen不够的问题,原因是默认启动的时候持久代太小了,通过设置-XX:MaxPermSize=512m即可解决,列一些非常常用的jvm参数设置:

    1. -XX:MaxPermSize=128m:设置PermGen的最大值为128MB。
    2. -XX:PermSize=56m:设置PermGen初始值为56MB。
    3. -Xms1024m:设置堆初始大小为1024MB。
    4. -Xmx2048m:设置堆最大值为2048MB。

    7、

    问题排查&解决

    ----- updating -----

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/antispam/p/4240265.html
Copyright © 2011-2022 走看看