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 -----

原文地址:https://www.cnblogs.com/antispam/p/4240265.html