标签:驼峰 基本 font maps keyword 连续 person 统一 main函数
推荐使用的markdown编辑器 Typora(可以边编辑边实时显示)
建议直接通过IDEA来创建Spring Initializer,再选择对应的java版本和springboot依赖即可。
指定tomcat端口运行:
方法1:通过java命令执行jar包时,制定tomcat端口:java -jar xxx.jar --server.port=8080
方法2:找到main方法所在在启动aplication.java文件,Edit Configurations -》 VM options -> -Dserver.port=8082 (优先级最高)
方法3:打开包目录下的resources/application.properties,添加server.port=8083,然后重启项目即可.(优先级次高)
将一个包打成可执行jar包方法:Maven->demo->Lifecycle -> 双击package即可。
执行jar包:java -jar xxx.jar即可
=================== 遇到的常见问题:
Maven plungs clean 错误
原因:maven配置文件和maven安装路径不符合
解决:settings-> Build Tools 重新指定下maven的各路径即可。
idea中dependencies中总是有红色波浪线:
解决:注释掉pom.xml中的依赖部分,再释放即可。
有时需要重新加载maven包或项目:
打开当前包的pom.xml文件,右键 -> Maven -> Reimport;
或直接点开右上角 Maven按钮,Reimport All Maven Projects
pom.xml的bulid部分中的<artifactId>spring-boot-maven-plugin</artifactId>报红(即not found):
原因:maven未配置 / 下载的spring-boot-maven-plugin存在多个版本导致maven获取时版本冲突
解决:配置maven / 找到repository仓库下的org\springframework\boot\spring-boot-maven-plugin目录并删除,然后重新加载项目即可。
Spring的filter中无法@Autowired接口的解决方案:
service手动实例化(new)导致类中的spring对象无法注入的问题解决:
使用@service注解的类不允许使用new创建类实例,否则@Autowired注入@service修饰的类时会是空指针
同时,若类A中@Autowired依赖注入了类B实例,则类A也不允许使用new创建类实例,否则成员类B实例也是空指针。
驼峰命名法的成员变量,类序列化和反序列化JSON时,为避免出错需要在类定义前加上以下注解:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
IDEA全局搜索Ctrl+Shift+F无效:
方法1:搜狗输入法繁简切换占用导致,设置->高级->快捷键->系统功能快捷键->取消繁简切换即可
方法2:修改全局搜索的快捷键,IDEA 设置 -> Keymap -> 搜索Find -> 找到Find in Path 双击
Maven包版本冲突解决办法:
使用Maven Helper工具排除多余版本的包时,Refresh UI;对于找不到的类可能需要鼠标放到报错上,点击add Classpath
IDEA回到上次代码浏览位置:Ctrl+alt+左箭头/右箭头
Ctrl+Alt7:查引用
Ctrl+N:查类名
Ctrl+F12:查当前类的所有函数
断点右键:可以添加条件(java代码形式)来让满足某种条件(变量等于某个值)才停在该断点.
F9:跳到下个断点
F8:跳到下个函数
修改代码需要重新执行应用
Ctrl + J:查看代码快捷输入
双击shift搜文件
Alt + Enter:添加类/方法注释
Spring重试机制:
YAML语法:
yml/yaml:以数据为中心,比json、xml等更适合做配置文件(没有开闭标签); 但properties文件的可读性更好
1、基本语法
- k:(空格)v:表示键值对(空格必须有)
- 以空格的缩进来控制层级关系
- 属性和值大小写敏感
server:
port:8081
path: /hello
2、值的写法
- 字面量:普通的值(数字、字符串、布尔)字符串默认不用加上单引号或双引号;双引号:不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思(即\n会变成换行)单引号:会转移特殊字符,即\n会直接输出\n而不会打印换行
- 对象、Map(属性和值)
friends:
lastname: zhangsan
age: 20
行内写法:
friends: {lastname: zhangsan, age: 18}
pets:
- cat
- dog
- pig
行内写法:
pest: [cat,dog,pig]
Springboot基础
@ResponseBody放在类开头前面:这个类的所有方法返回的数据直接写给浏览器(如果是对象转为json数据).@ResponseBody和@Controller可以被@RestController一个替换.
resources目录结构:
- static:存放静态文件(eg:js、css文件)
- templates:存放模版文件
- application.properties/application.yml:全局配置文件,修改springboot自动配置的默认值
自动注入配置:
@ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关在配置进行绑定(默认从配置文件中获取值); prefix = "person":配置文件中哪个下面的所有属性进行一一映射。只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能,即必须加到@Component里.在pom.xml中添加ConfigurationProperties对应的插件后,需要重新运行springboot程序才能生效.这样在编写yml配置文件时, 会有提示。${person.name}获取值;#{12*2}计算表达式。
@Value与@ConfigurationProperties区别:
@Value需要一个个指定,支持表达式计算,不支持JSR303数据校验, 不支持复杂类型封装即无法获取其值; eg: @Value("${person.name}")@ConfigurationProperties能批量导注入配置文件中的属性, 支持松散语法, 但不支持比表达式计算,支持数据校验, 支持复杂类型封装。
使用场景:
- 如果只是某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
- 如果专门编写了一个javaBean来和配置文件进行映射,直接使用@ConfigurationProperties
@PropertySource 与 @ImportResource
@PropertySource:加载指定的配置文件eg:@PropertySource(value = {"classpath:person.properties"})@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效eg:@ImportResource(locations = {"classpath:beans.xml"})标注在配置类上
SpringBoot推荐给容器中添加组件的方式:推荐使用全注解方式
1、配置类 ===== Spring配置文件(创建方式:XML Configuration File -> Spring Config)2、使用@Bean给容器添加组件
配置文件中的占位符
1、随机数
${random.value}、${random.int}、${random.int(10)}
2、占位符获取之前配置的值,如果没有可以用:指定默认值
person.last-name=张三${random.uuid}
person.dog.name=${person.hello:hello}_dog
Profile
Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境1、多profile文件形式: - 格式:配置文件名命名成 application-{profile}.properties - eg: application-dev.properties2、多profile文档块形式: yml支持多文档块形式:---单独一行表示一个文档块
server:
port: 8081
spring:
profiles:
active: prod
person:
last-name: hello
age: 18
boss: false
maps: {k1: v1, k2: 12}
dog:
name: 小狗
age: 12
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod
3、激活方式: * (多profile文件形式)主配置文件中指定 spring.profiles.active=dev * 命令行 --spring.profiles.active=dev (优先级高于配置文件中的指定,但也会形成互补配置) 方式1:edit Config -> Program arguments -> --spring.profiles.active=dev 方式2:java -jar demo.jar --spring.profiles.active=dev 语法:--配置项=value * jvm参数 -Dspring.profiles.active=devedit Config -> VM options -> -Dspring.profiles.active=dev
配置文件加载位置springboot启动会自动扫描以下位置的aplication.properties或者application.yml文件作为Springboot的默认配置文件:-file(项目目录的根目录下的config,即config与src同目录):./config-file(项目目录的根目录下):./-classpath(classpath指rsources目录下的config目录):/config/-classpath:/优先级由高到低; Springboot会加载以上四个位置的配置文件,会形成一种互补配置效果,但高优先级会覆盖低优先级的配置。
# 配置项目的访问路径
server.servlet.context-path=/boot02
# 浏览器发送hello请求的真实路径需要是127.0.0.1:8080/boot02/hello
可以通过sprin.config.location来改变配置文件的位置:项目打包好后,可以通过命令行形式来指定加载的配置文件位置,但指定加载的配置文件和默认加载的配置文件会同时起作用,满足前面的规则。eg: java -jar demo.jar --sprin.config.location=G:/application.properties
外部配置加载顺序
- 由jar包外向jar包内进行查找(即通过命令行指定的配置优先级高于通过配置文件指定的)
- 打包只会打包src目录下的配置,不会打包与src同级的目录config;
- jar包外的配置文件即指src同级的config中的配置文件.若拷贝配置文件到与jar包同级的目录中,则该配置文件也是jar包外部的配置文件,最先生效.
- 优先加载带profile的配置文件
- jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
- 再来加载不带profile
- jar包外部的application.properties或application.yml(不带spring.profile)配置文件
- jar包内部的application.properties或application.yml(不带spring.profile)配置文件
spring-boot-autoconfigure.jar/META-INF/spring.factories文件:包含Springboot启动时加载的所有自动配置类,每个自动配置类EnableConfigurationProperties使生效的properties类定义了能配置的属性值。自动配置类添加组件(@Bean)时,会从properties类中获取某些属性,就可以在配置文件中指定这些属性的值(因此无需查官网).
@Conditional派生注解(Spring注解版原生的@Conditional作用)作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置类里面的所有内容才会生效.
可以能过在配置文件中启用debug=true属性(开启Springboot的debug),来让控制台打印自动配置报告,获取哪些自动配置项生效了(Positive matches),以及没启用的配置类(Negative matches)。
日志框架的使用
SLF4j只是日志实现框架的抽象层;logback、log4j等均是日志实现类,实际调用时应使用抽象层的方法,但配置文件还是做成日志实现框架的配置文件;Springboot使用slf4j和logback来提供日志功能,springboot能自动适配所有的日志框架,引入其他框架的时候,只需要把这个框架的日志框架排除掉;Spring框架用的是commons-logging日志框架Springboot默认已经配置好了日志框架日志级别:trace < debug < info < warn < error,Springboot默认使用的Info级别;
日志输出配置
如何让系统中所有框架的日志都统一到slf4j:
- 1、将系统中其他日志框架先排除出去
- 2、用中间包来替换原有的日志框架,即将其它日志框架转成slf4j
- 3、我们导入slf4j要用的日志实现
- 如果要引入其他框架,一定要把这个框架的默认日志依赖移除掉,否则可能会存在日志jar包冲突
IDEA使用
- alt + insert:调出get、set代码快捷插入所有属性对应的方法,以及类的其他常用方法
- properties配置文件编码问题(支持中文):
- File Encodings -> Properties Files -> UTF-8,勾上Transparent native-to-ascii conversion
- File Encodings -> Global Encoding -> UTF-8
- 右键java文件 -> Copy Reference: 可以复制类的完事包路径
- 输入pbvm,直接插入main函数代码体; 输入syso,插入打印代码
- 全局搜索类名:Ctrl+n
- 查看项目的依赖结构图:
- 打开pom.xml右键 -> Diagrams -> Show Dependencies
- 若想要排除某个jar包,直接可依赖结构图中该依赖包的方框右键该包excldue即可.
- 调出所有可以缩写的代码片段
- Ctrl + P/Q 查看方法提示/查看方法声明
- Ctrl + O/I 调出所有需要重写/实现的方法
- 鼠标选中代码,然后Ctrl+alt+t把代码放在需要的代码块中
- Ctrl+E 最近访问的文件列表
- Ctrl+shift+/ 以代码块形式注释/反注释
- Ctrl+/ 以代码行形式注释/反注释
- Ctrl+w 连续按可以选中更外层的代码块
- 在某个地方Ctrl+C复制了文件,直接在idea想要拷贝到的目录下Ctrl+V即可实现拷贝,而无需手动打开对应的目录
- Ctrl+Shift+F 全局搜索
常用的注释:
1、@RestController 与 @RequestMapping:
- @Controller标识该类是一个Controller处理器,用来创建处理http请求的对象;
- @ResponseBody用来配合@Controller将返回的响应转成json格式;
- @RestController=@Controller+@ResponseBody,因此只需要配置一个@RestController即可完成前面两者的功能.
2、@ResponseStatus:
一般用于异常抛出时,修改响应默认返回的状态码.详见:https://www.cnblogs.com/lvbinbin2yujie/p/10575101.html
3、@Autowired:
需要调用Service类(接口的实现以@service注释)的实例时,利用@Autowired自动装配.详见:https://www.jianshu.com/p/9062a92fbf9a
4、@Bean
Bean可以理解为Spring容器中的组件,@Bean放在方法前面,表示生成一个组件类的实例(组件)并放入容器中,然后就可以通过@Autowired等注解依赖注入该组件实例。详见:https://blog.csdn.net/github_34606293/article/details/78868945
4、@ComponentScan
@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中;自动扫描路径下带有@Controller,@Service,@Repository,@Component注解加入spring容器. 原来需要@Bean注解一个定义方法返回一个实例.详见:https://segmentfault.com/a/1190000015967862
5、@requestMapping
使用:https://blog.csdn.net/jaryle/article/details/72965885四种常见的 POST 提交数据方式:https://imququ.com/post/four-ways-to-post-data-in-http.html若不指定consumes,PathVariable中的参数会生成JSON字符串发送; 若不指定produces默认响应会以JSON字符串返回.MULTIPART_FORM_DATA_VALUE一般是POST请求上传文件时用到.
6、@Deprecated
@Deprecated 表示此方法已废弃、暂时可用,但以后此类或方法都不会再更新、后期可能会删除,建议后来人不要调用此方法。
SpringBoot学习
标签:驼峰 基本 font maps keyword 连续 person 统一 main函数
原文地址:https://www.cnblogs.com/luckyboylch/p/12327124.html