Spring Java EE @PostConstruct @PreDestroy Servlet生命周期的注解
JavaEE 5引入了2个作用于Servlet生命周期的注解:@PostConstruct
和@PreDestroy
,通过这两个注解可以实现Bean初始化之前和销毁之前的自定义操作。
JavaEE 5引入了2个作用于Servlet生命周期的注解:@PostConstruct
和@PreDestroy
,通过这两个注解可以实现Bean初始化之前和销毁之前的自定义操作。
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
一个xml文档由元素节点,属性节点,文本节点构成,其中bookstore被称为文档元素或根元素,也是一个元素节点。XML 文档中的每个成分都是一个节点Node
。
SQL脚本:
CREATE TABLE `area` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL COMMENT '名称',
`abbr` varchar(50) NOT NULL COMMENT '简称',
`sortBy` int(3) DEFAULT '0' COMMENT '排序',
`level` int(1) DEFAULT NULL COMMENT '等级(1省/直辖市,2地级市,3区县,4镇/街道)',
`longitude` varchar(50) DEFAULT NULL COMMENT '经度',
`latitude` varchar(50) DEFAULT NULL COMMENT '纬度',
`parentId` int(11) DEFAULT NULL COMMENT '父级ID',
PRIMARY KEY (`id`),
KEY `fk_area_parent` (`parentId`),
CONSTRAINT `fk_area_parent` FOREIGN KEY (`parentId`) REFERENCES `area` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Intellij IDEA功能很强大,而且是越用越爱不释手的,下文用IDEA
来表示:Intellij IDEA。
serialVersionUID
默认IDEA
是关闭了继承Serializable
接口类生成serialVersionUID
的警告,如果要让IDEA
自动生成,需要进行如下操作:
Atl + Enter
键,就会提示生成serialVersionUID了。IDEA默认自动保存文件,而且及时修改了文件也没有*
标记。
-Xms128m -Xmx256m -Xmn32m -XX:PermSize=32M -XX:MaxPermSize=256m
Xms
和Xmx
:程序运行进程堆内存能占用的最小大小和最大大小;Xmn
:用来设置堆内新生代的大小。通过这个值我们也可以得到老生代的大小:-Xmx
减去-Xmn
;Xss
:设置每个线程可使用的内存大小XX:PermSize
和XX:MaxPermSize
:设置永久代的最小大小和最大大小。注意:Java 8移除该参数,而是用本地元空间Metaspace,大小由-XX:MetaspaceSize
和-XX:MaxMetaspaceSize
进行设置。-o
:是否离线-U
:是否更新Snapshots-X -e
:Debug Output-DskipTests=true
:编译test,但是忽略允许test(compiles the tests, but skips running them)-Dmaven.test.skip=true
:是否忽略test(skips compiling the tests and does not run them)命令参数 | 命令全称 | 备注 |
---|---|---|
mvn -am | --also-make | 表示同时处理选定模块所依赖的模块 |
mvn -amd | --also-make-dependents | 表示同时处理依赖选定模块的模块 |
mvn -B | --batch-mode | 在非交互(批处理)模式下运行(该模式下,当Mven需要输入时,它不会停下来接受用户的输入,而是使用合理的默认值) |
mvn -b | --builder | 设置build构建时的参数 |
mvn -C | --strict-checksums | 如果校验码不匹配的话,构建失败 |
mvn -c | --lax-checksums | 如果校验码不匹配的话,产生告警 |
mvn -cpu | --check-plugin-updates | 对任何相关的注册插件,强制进行最新检查(无效,只保留向后兼容) |
mvn -D | --define | 定义系统属性 |
mvn -e | --errors | 控制Maven的日志级别,产生执行错误相关消息 |
mvn -emp | --encrypt-master-password | 加密主安全密码,存储到Maven settings文件里 |
mvn -ep | --encrypt-password | 加密服务器密码,存储到Maven settings文件里 |
mvn -f | --file | 强制使用备用的POM文件(或者目录下的pom.xml) |
mvn -fae | --fail-at-end | 仅影响构建结果,允许不受影响的构建继续 |
mvn -ff | --fail-fast | 遇到构建失败就直接退出 |
mvn -fn | --fail-never | 无论项目结果如何,构建从不失败 |
mvn -gs | --global-settings | 全局配置文件的备用路径 |
mvn -gt | --global-toolchains | 全局构建链文件的备用路径 |
mvn -h | --help | 显示帮助信息 |
mvn -l | --log-file | 设置构建输出的日志文件(禁用输出颜色) |
mvn -llr | --legacy-local-repository | 使用Maven 2遗留的本地存储库行为,即不使用_remote. Repository。也可以使用-Dmaven.legacyLocalRepo=true来激活 |
mvn -N | --non-recursive | 不递归到子项目中 |
mvn -npr | --no-plugin-registry | 无效,只保留向后兼容 |
mvn -npu | --no-plugin-updates | 无效,只保留向后兼容 |
mvn -o | --offline | 离线模式 |
mvn -P | --activate-profiles | 激活的profile,如果多个以逗号分隔 |
mvn -pl | --projects | 选项后可跟随{groupId}:{artifactId}或者所选模块的相对路径(多个模块以逗号分隔) |
mvn -q | --quiet | 静默输出,仅显示错误信息 |
mvn -rf | --resume-from | 表示从指定模块开始继续处理 |
mvn -s | --settings | 用户设置文件的替代路径 |
mvn -t | --toolchains | 用户构建链文件的备用路径 |
mvn -T | --threads | 构建的线程数 |
mvn -U | --update-snapshots | 强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖) |
mvn -up | --update-plugins | 无效,只保留向后兼容 |
mvn -v | --version | 显示版本信息 |
mvn -V | --show-version | 显示版本信息后继续执行Maven其他目标 |
mvn -X | --debug | 控制Maven的日志级别,产生执行调试信息 |
maven-jar-plugin
和maven-dependency-plugin
插件<groupId>your-groupid</groupId>
<artifactId>your-artifactid</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>your.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/libs</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-jar-plugin
插件配置mainClass
和指定classpath
addClasspath: 是否在manifest文件中添加classpath。默认为false。如果为true,则会在manifest文件中添加classpath,这样在启动的时候就不用再手动指定classpath了。如下所示,文件中增加了Class-Path
一行
maven-dependency-plugin
插件将所依赖的jar
包复制到指定目录。
# 打包
mvn package
# 启动
java -jar your-target.jar
maven-assembly-plugin
插件<groupId>your-groupid</groupId>
<artifactId>your-artifactid</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
<compilerVersion>${maven.compiler.compilerVersion}</compilerVersion>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>your.MainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
maven-assembly-plugin
插件将所有的东西都打包到一个jar包中。
mvn package
打包完成后,会在target文件夹下生成两个jar包,一个是不带依赖的jar包,一个是后缀有-dependencies
带有依赖的jar包
# 打包
mvn package
# 启动
java -jar your-target-dependencies.jar
-Djetty.port=xxx
(更改xxx设置为自定义端口,比如:8081)快捷键 | 说明 |
---|---|
Ctrl + F | 当前文件进行文本查找 |
Ctrl + R | 当前文件进行文本替换 |
Ctrl + Z | 撤销 |
Ctrl + Y | 删除光标所在行 或 删除选中行 |
Ctrl + X | 剪切光标所在行 或 剪切选择内容 |
Ctrl + C | 复制光标所在行 或 复制选择内容 |
Ctrl + D | 复制光标所在行 或 复制选择内容,并把复制内容插入光标位置下面 |
Ctrl + W | 递进式选择代码块。可选中光标所在的单词或段落,连续按会在原有选中的基础上再扩展选中范围 |
Ctrl + E | 显示最近打开的文件记录列表 |
Ctrl + N | 根据输入名称查找Class 类文件 |
Ctrl + G | 跳转到指定行 |
Ctrl + J | 插入自定义动态代码模板 |
Ctrl + P | 方法参数提示显示 |
Ctrl + Q | 光标所在的变量 / 类名 / 方法名等上面(也可以在提示补充的时候按),显示文档内容 |
Ctrl + U | 前往当前光标所在的方法的父类的方法 / 接口定义 |
Ctrl + B | 进入光标所在的方法/变量的接口或是定义处,等效于Ctrl + 左键单击 |
Ctrl + K | 版本控制提交项目,需要此项目有加入到版本控制才可用 |
Ctrl + T | 版本控制更新项目,需要此项目有加入到版本控制才可用 |
Ctrl + H | 显示当前类的层次结构 |
Ctrl + O | 选择可重写的方法 |
Ctrl + I | 选择可继承的方法 |
Ctrl + + | 展开代码 |
Ctrl + - | 折叠代码 |
Ctrl + / | 注释光标所在行代码,会根据当前不同文件类型使用不同的注释符号 |
Ctrl + [ | 移动光标到当前所在代码的花括号开始位置 |
Ctrl + ] | 移动光标到当前所在代码的花括号结束位置 |
Ctrl + F1 | 在光标所在的错误代码处显示错误信息 |
Ctrl + F3 | 调转到所选中的词的下一个引用位置 |
Ctrl + F4 | 关闭当前编辑文件 |
Ctrl + F8 | 在Debug模式下,设置光标当前行为断点,如果当前已经是断点则去掉断点 |
Ctrl + F9 | 执行 Make Project 操作 |
Ctrl + F11 | 选中文件 / 文件夹,使用助记符设定 / 取消书签 |
Ctrl + F12 | 弹出当前文件结构层,可以在弹出的层上直接输入,进行筛选 |
Ctrl + Tab | 编辑窗口切换,如果在切换的过程又加按上delete,则是关闭对应选中的窗口 |
Ctrl + End | 跳到文件尾 |
Ctrl + Home | 跳到文件头 |
Ctrl + Space | 基础代码补全,默认在 Windows 系统上被输入法占用,需要进行修改,建议修改为 Ctrl + , 或 Alt + / |
Ctrl + Delete | 删除光标后面的单词或是中文句 |
Ctrl + BackSpace | 删除光标前面的单词或是中文句 |
Ctrl + 1,2,3...,9 | 定位到对应数值的书签位置 |
Ctrl + 左键单击 | 在打开的文件标题上,弹出该文件路径 |
Ctrl + 光标定位 | 按 Ctrl 不要松开,会显示光标所在的类信息摘要 |
Ctrl + ← | 光标跳转到当前单词 / 中文句的左侧开头位置 |
Ctrl + → | 光标跳转到当前单词 / 中文句的右侧开头位置 |
Ctrl + ↑ | 等效于鼠标滚轮向前效果 |
Ctrl + ↓ | 等效于鼠标滚轮向后效果 |
Maven
的中央仓库http://repo1.maven.org/maven2/,该地址是内置与Maven
源码中。其他的仓库,都是镜像。Maven
仓库,本地仓库是中央仓库(或者说远程仓库)的一个缓冲和子集,当你构建Maven
项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven
会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的Jar
包版本在本地仓库没有,而且也不存在于远程仓库,Maven
在构建的时候会报错,这种情况可能发生在有些Jar
包的新版本没有在Maven
仓库中及时更新。Maven
缺省的本地仓库地址为${user.home}/.m2/repository
。也就是说,一个用户会对应的拥有一个本地仓库。当然你可以通过修改${user.home}/.m2/settings.xml
配置这个地址,也可以通过修改的Maven
目录下${MAVEN_HOME}/conf/settings.xml
配置本机全局本地仓库地址。<settings>
<localRepository>D:/work/resources/repository</localRepository>
</settings>