springboot从零开始,快捷键快捷操作
⾸先建⼀个maven ⼯程
idea main⽅法的快捷键是psvm 回车。
maven 导⼊包,官⽅⽹站有
创建⼀个启动类。⽤注解。
ctrl alt L 是代码修改快捷键。
/在创建类的时候输⼊包名。加⽂件名,可以⾃动创建该包
也可⽤restController 即restful 嘛, 这相当于 controller 加 ResponseBody json 写在body⾥嘛, 如果⼜要返回html ⽂件呢? ⾃⼰百度。
因为从零开始,没有配置⽂件,我这⾥端⼝冲突了,因为spring 会扫描 res下的yml⽂件,所以我新建⼀个⽂件。
1.内容格式⽐较:
.properties⽂件,通过.来连接,通过=来赋值,结构上,没有分层的感觉,但⽐较直接。
.yml⽂件,通过:来分层,结构上,有⽐较明显的层次感,最后key赋值的:后需要留⼀个空格
2.执⾏顺序
如果⼯程中同时存在application.properties⽂件和 l⽂件,yml⽂件会先加载,⽽后加载的properties⽂件会覆盖yml⽂件。所以建议⼯程中,只使⽤其中⼀种类型的⽂件即可。
打包部署:
maven 导⼊官⽅推荐的plugin 点击maven 到lifecycle 双击package 即可在target中看到jar
如果error 试试配置 l⽂件,可能配置标签不配对。详见百度。cmd中java -jar 后 输⼊前⼏个字符,
tab ⼀下可以 补全。
如果你的maven ⼀直是从repo下载,那么你的l可能有错误,导致IDEA 默认下载了
shift是什么意思starter parent 中进⼊源码中看,⼀堆版本。,仲裁中⼼,以后导⼊依赖说明是不⽤写版本的。如mysq
l,但有⼀些是没有的。
spring bootstart web 也叫场景启动器。已经导⼊了web 模块。如果你要做什么场景如 redis 啊,只需要在maven 中导⼊spring 的 相关场景启动器即可。版本由spring 控制。可以在github 中看到不同场景所需要的依赖⽰例⼦。
快捷键: shift +空格 半⾓全⾓。
配置⽂件类,spring 注解标明是哪⼀个。
autoconfiguration 开启⾃动配置。,加上这个注解就会⾃动配置,就会⾃动配置。@import是底层的注解,导⼊组件到容器中。Registrar 类中,导⼊⼀些注解元数据,⼀个⽅法得到包名,debug⼀下,可以发现这是⾃⼰的项⽬中的包名,所以扫描包下⾯的包、类等,也就是那个SpringBootApplication注解的类那个包名。包下所有组件扫描出来 。
⽬前IDEA都⽀持初始化项⽬,new project 的时候可以dependencies 组件,就是上⾯pom中的web模块。IDEA中res 中是⽹页
,templates 可以使⽤模板引擎 freemarker、thymeleaf。
全局配置⽂件,修改默认值。yml 以数据为中⼼。xml 浪费了⼤量标签。yml 省标签,数据直观。yml 使⽤k : vproperties文件用什么打开
空格必须有,
空格来控制层级关系。
属性和值⼤⼩写敏感。
值的写法:普通、对象、Map (k,v)、数组(list、set)。注:普通值如果是字符串,双引号不转义,单引号转义(原样输出)。
快捷键:alt +Insert ⾃动⽣成 get set 代码,dao pojo 的时候很有⽤,如,返回或设置属性。 不⽤⼿写。也可以alt insert 重写to string ⽅法。
参照下⾯链接,
类从配置⽂件中获得值,注解configurationproperties。
其中 prefix 是指定要yml中那么多属性,是哪个装填。还是报错。
导⼊⼀个依赖可以在yml 中看到提⽰。
但还是报错。参照下⾯链接。
Not registered via @EnableConfigurationProperties or marked as Spring component
没有在⾃动装填中注册,或者标志为⼀个spring 组件。
添加后错误确实是没了,但是在SpringBoot的单元测试时会看到错误
回到⾃定义的bean Person中,添加注解@Component,声明将这个组件添加⾄容器中,这样才可以被使⽤?
==“只有这个组件是容器中的组件,才能使⽤容器提供的@ConfigurationProperties功能,”==
组件元数据,类元数据,配置元数据,底层元数据。??
单元测试:
1. spring unit
从零开始,所以要⼿动加,如果⽤IDEA创的话,就不⽤。
RunWith(xxx.class):指定⽤xxx驱动器来跑。
springBootTest 注解说明这个类是测试⽤。
可以在测试期间⽅便像编码⼀样⾃动注⼊容器的功能。⽤AutoWired注⼊。
可以进⾏局部测试,很⽅便。
2. toString
重写了这个⽅法,所以system.out.println 是不⼀样的。不重写输出的只是地址。
3. 总结
配置⽂件怎么写,
JAVABEAN:长得是什么样,像POJO,entiy之类的。
maven导⼊配置依赖,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
作⽤就是在yml中配置可以看到提⽰⽽已?⾃动补全之类的。驼峰写法,或者⽤-代替⼤写。
要加在容器中⽤component。
两个⽂件的配置的区别,先后覆盖情况,⽤⼀个就⾏了。properties⽂件可以设置编码。
除了⽤configurationpropeties 加prefix之外,另⼀种⽅法。⽤value注解,在以前,<bean>标签 class ,<property> 中写value,这⾥作⽤是差不多的,spring 底层的东西。以前值⽀持的写法(¥ #),现在也⽀持。只不过要⼀个个指定。value不⽀持-的转化。(松散语法。) value ⽀持表达式语⾔。configuration ⽀持数据检验,复杂类型的取值。⽤validated 注解检验,与configurationproperties⼀起
使⽤。对属性检验。业务逻辑中,只取⼀个值,⽤value⽅便。专门的JavaBean来映射配置⽂件的话,就⽤configuration
1. @PropertySource
加载指定配置⽂件,上⾯的configurationProperties 是全局的,⽂件太⼤。@propertySource可以指定⽂件,不会去默认的全局中寻。指定类路径下的配置⽂件。
只能Properties ⽂件,
⽽且不能省掉@ConfigurationProperties,不然会报错。
2. @ImportResouce
导⼊Spring 的配置⽂件,并让配置⽂件⽣效。如:bean中的xml ⾃⼰配置⽂件,测试单元中,看容器中有没有这个id
@Autowired
ApplicationContext ioc;
@Test
public void testHelloService() {
boolean b = ainsBean("helloWordService");
System.out.println("容器中是否有bean 配置,id 为hellowordService的配置:" + b);
}
以前是⽤Bean xml 之类的配置的,现在不知道。然⽽spring 不推荐怎么做。
spring 推荐给容器加组件的⽅式是:
1、配置类
⽤注解的⽅式来加组件。
新建⼀个类,⽤@Configuration 开标明这是⼀个配置类。
以前是⽤<bean></bean>来添加组件的,现在配置类⾥,⽤@Bean注解⼀个⽅法。
⽅法返回值做为组件添加到容器中。容器中的组件默认的ID就是这个⽅法名。
return ⼀个new xxx;
3. 配置⽂件占位符
在配置⽂件中,⽤${random} 之类的,也可以取变量(变量不存在则原样表⽰,也可以冒号指定默认值)。
占位符是什么意思?
4. Profile
profile 是在不同环境中,提供⽀持,⽅便切换环境,如开发,部署环境。
⽂件名规范: application-环境标识.yml/properties
如端⼝号。
sprig.profiles.active=dev 激活配置。 dev 是环境标识
yml 多⽂档模块:在ymL 中使⽤---三条杠,分成多个⽂档块。然后由上⾯那个的激活来看是谁激活的。
命令⾏也可以激活,在IDEA中的RunConfiguration 中的Program Arguments 输⼊--spring.profiles.active=dev
IDEA 中的RunConfiguration 虚拟vm options 配置也⾏,-Dspring.profile.active=dev
还可以打包完成后在cmd中 java -jar spring tab .jar --spring.profiles.active=dev 开启。
spring 配置⽂件可以 在file 路径下,也可以在file:/config/下,也可以在 classpath下,classpath:/config
优先从 xx:config 搜索,有优先级的。resouce 下是类路径建⼀个config,下的,先搜索。 当前项⽬⽂件是file: 可以建⼀个config ⽂件夹,
优先级: file:/config> file:>classpath:config>classpath: 优先级⼤的会覆盖优先级⼩的。全部加载,没有冲突就互补配置。
可以改变默认的配置⽂件位置:在配置⽂件中指定另⼀个位置: spring config.location ,类似上⾯⼿动写cmd
在实际项⽬中 当配置改变时,重新启动的时候cmd输⼊⼀个 配置路径,加载新的配置,旧的配置也会⽣效(互补)。
外部的配置依然是有顺序的,同理。
命令⾏优先级⾼,带profiles 的优先⾼,外的⼤于内的。空格隔开多个配置 ,也可以外部,不⽤命令⾏输那么多。详情官⽅⽂档,百度。
1. spring⾃动配置原理
yml 能配置什么,看官⽅⽂档。
培训班还能开吗EnableAutoConfiguration 扫描meta-inf/spring factory,返回组件加到组件中,enableconfiguration 中的 class ,值加载进来。xxxautoconfiguration 类⾃动加载。
以httpencodinATUOconfiguration
@configuration 配置类,
enableconfiguration auto ,启动⾃动配置。properties.
点击进去,conditionalonwebapplication 判断是不是web应⽤,配置⽣效,否则不⽣效。条件判断,on 后⾯是条件
如果配置⽣效就会添加组件,组件的属性是从对应的properties中获得的,这些类中,每⼀个属性⼜是和配置⽂件绑定的,所以我们能配置什么,主要看⾃动配置这个类有什么
springboot 启动会加载⼤量⾃动配置类,我们需要的功能如果springboot 有默认写好的配置,
如果有, 我们看这个⾃动配置类中到底配置了那些组件,我们要⽤的组件,有的话,就不⽤配置,如果没有这个组件的配置,就⾃⼰配置,。
给容器中⾃动配置类添加组件的时候,会从properties 类中获取的属性,我们可以从配置⽂件中指定这些属性,
autoconfiguration ⾃动配置类,给容器添加组件,会有对应的xxxproperties封装⽂件中相关发属性。
conditional 扩展注解,百度,官⽅⽂档。
在yml 中打开debug=true 作⽤是在启动的时候会报告,使⽤了哪些⾃动配置类,控制台会输出哪些控制类⽣效了。
属性同好会在线播放动画岛
POSITIVE match 是匹配的, negetive match 是不匹配的。
3. ⽇志
⽇志 代码 System.out.println(""); ⼤多控制台太乱,注释⿇烦,更改到保存到⽂件也⿇烦。
⽇志功能增加,⾼⼤上功能: 异步模式输出,⽽不是I/O中断,⽇志⾃动归档功能?
⽤框架.jar 。
哪天,这个框架不适合了,换新的框架,修改API,
那就,想想JDBC。 改为接⼝编程,不⽤修改API,⽇志抽象层.jar ;⾯向这个抽象层编程。在项⽬中导⼊⽇志。
框架常见的有、、、
⽇志门⾯:抽象层
⽇志实现:实现
这两个各选⼀个框架,门⾯选SLF4j ,实现是Logback (log4j2 暂时等多点⼈⽤先,好⽤,以后⽤这个,学习先⽤logback)。
1. SLF4j使⽤
⽇志调⽤应该调⽤门⾯类,⽽不是实现类。
参考官⽅⽂档,import Logger. 官⽅有⼀张图,关于实现类的实现,不实现的话,输出的是空。导⼊Logback.jar SLF4j 会去⾃⼰调⽤。 log4j 还要适配器,适配层。
实现类的框架有配置⽂件,我们配置的是实现层的框架的配置⽂件。
2. 问题
不同模块、不同框架,⽤的是不同⽇志框架,统⼀太难。即使,底层⽤的是不同⽇志框架。
通过统⼀使⽤某⼀框架进⾏输出。看官⽅⽂档 legacy APIS 中。统⼀使⽤,SLF4j 。那就要去/换掉其它⽇志框架的依赖,这会运⾏不起来。所以⽤⼀个狸猫换太⼦的⽅法,中有⼀个适配层⼜调⽤了指向SLF4j来实现,
3. ⽇志统⼀步骤
close是什么意思英语a、排除其它框架的⽇志框架。如spring ,
b、⽤中间包替换原有⽇志框架,
c、导⼊slf4j其它的实现。
4. IDEA中的maven
len函数和find函数快捷键,l 中⽤右击选Diagrams 可以看到依赖的关系图。
根据关系图,我们知道了springboot 使⽤slf4j+logback ,springboot 把其它⽇志替换成了slf4j
进⼊源码中,可以看到,apache的⽇志中,new 的却是slf4j , 这⾥就进⾏了替换。包名不变(不会not found)内部new 变化⽽已。中间转变包:转换⽤的。
spring 已经做好了,
如果引⼊其它框架,移除掉原来⽇志框架的** 依赖 **,因为,因为包名类名相同会冲突。
spring 给出了排除的⽰例,在l中。
<exclusion>标签就是排除作⽤。
所以springboot ⾃动适配了框架,要做排除的是引⼊其它框架的时候,要排除操作。
因为springboot 默认使⽤了slf4j logback 所以直接⽤就⾏了。
//⽇志的级别 可以调整输出的信息,只看需要的信息
//springboot 默认使⽤info及以后的级别,可以在配置⽂件中调整,
logging:
level:
HelloWord: trace 指定到相应的包名。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论