Sping_Boot(1)
微服务的概念:
1.一个项目可以由多个小型服务构成(微服务)
2.使用spring cloud 进行合并
3.并行计算
Spring boot可以开发微服务模块
a.简化j2ee开发
b.整个spring 技术栈的整合(整合springmvc spring)
c.整个j2ee技术的整合(整合mybatis redis)
准备:
jdk:
JAVA_HOME:jdk根目录
path:jdk根目录\bin
classpath:.;jdk根目录\lib
maven:
MAVEN_HOME:maven根目录
path:maven根目录\bin
配置Maven本地仓库: mvb根目录/conf/setting.xml文件中的
@springBootConfigration: 包含@Configruraation,表示“配置类”:
1.该类是一个配置类
2.加了@Configuration注解的类,会自动
@Configuration
public class A //表示A是一个用于配置的类
{
@EnableAutoConfiguration:使spring boot 可以自动配置:可以找到@SpringBootAppilcation所在类的包,springboot在启动时,会根据META-INF/spring.factories找到相应的三方依赖,并将这些依赖引入本项目。
}
总结:编写项目时,一般对自己写的代码和三方依赖进行配置,但springboot可以自动进行配置,自己写的代码,通过@SpringBootConfiguration自动帮我们配置;
spring-boot-autoconfigure-2.0.3RELEASE.jar中的META-INF/spring.factories进行自动配置
自己写的代码,spring boot通过@SpringBootConfiguration自动帮我们配置:
引入三方依赖(jar、配置) 通过spring-boot-autoconfigure-2.0.3RELEASE.jar中
的META-INF/spring.factories进行声明,然后通过@EnableAutoConfiguration开启使用即可spring-boot-autoconfigure-2.0.3RELEASE.jar包中包含了J2EE整合体系中需要的依赖.
c.如何自动装配:
研究org.springframework.boot.autoconfigure.web.servlet.HttpEncondingAutoConfiguration通过观察该源码发现:
@Configuration:标识此类是一个配置类,将此类纳入springIoc容器
@EnableConfiurationProperties(HttpEncodingProperties.class):
通过HttpEncodingProperties将编码设置为 UTF-8(即自动装配为UTF-8,如何修改该编码:通过该Properties文件的prefix+属性名进行修改[配置文件中,yml/properties])
即:该注解给了默认编码UTF8,并且提供了prefix加属性名的方式供修改编码
配置文件:
作用:spring boot自动配置(约定8080),可以使用配置文件 对默认的配置进行修改
默认全局配置文件:
application.properties:k=v
application.yml :yml isn't a mark language,不是一个标记文档
yml的写法 k:空格V, 通过垂直对齐指定层次关系
server:
port: 8882
xml:是一个标记文档
8882
path:/a/b/c
通过yml给对象注入值:
@Component 将此Javabean
@ConfigurationProperties(prefix="student")
public class Student
| | 绑定@ConfigurationProperties(yml/properties) @Value("xx")二者可以互补 @ConfigurationProperties @Value 注值 批量注入 单个 松散语法 支持 不支持 SpEL 不支持 支持 JSR303数据校验 支持 不支持 注入复杂类型 支持(8个基本类型/String/Date) 不支持 @PropertySource:默认会加载application.properties/application.yml文件中的数据 例如@PropertySource(Value={“classpath:conf.properties”})加载conf.properties文件中的数据; 但是,@PropertySource只能加载properties,不能加载yml |
| @importResource Spring boot自动装配/自动配置 Spring等配置文件 默认会被Spring boot自动给配置好 如果要自己编写spring等配置文件,spring boot能否识别?默认不识别 如果需要,通过@ImportResource指定配置文件路径 但是不推荐手写spring配置文件 配置:xml配置文件,通过注解配置 spring boot推荐使用注解方式进行配置:写类@Configuration @Bean spring boot中全局配置文件中的 占位符表达式 a.随机数${random.uuid}等 b.引用变量值 yml中: student: name:${student.user.name} 实际引用的是properties中的student.user.name=zh yml中: student: name:${student.user.name:zh} 多环境切换(profile) a.properties 默认springboot会读取application.properties环境 多个; applicaiton-环境名.properties application-dev.properties 8883 application-test.properties 8884 如果要选择某一个具体的环境:application.properties中指定:spring.profiles.active=环境名 如果将application.properties注释掉,spring boot仍然会读取其他application-环境名.properties中的配置,并且properties中优先级高于其他 b.yml文件中配置多个环境: server: port:8883 spring: profiles: active:dev 指定本次采用的环境 第二个环境: --- server: port: 8884 c.动态切换环境: 1.运行参数指定环境(STS:Run configuration中的Argument-programargument): --spring.profiles.active=dev 2.命令行方式: java-jar项目名.jar--spring.profiles.active=环境名 3.通过vm参数指定环境: STS:Run Configuration -Argument -VM -DSpring.profiles.active=环境名 配置文件的位置: properties和yml中的配置,相互补充;如果冲突则properties的优先级高 spring boot默认能读取的东西:application.properties/application.yml,这两个文件的位置可存在于 file:/项目根目录/config application.properties file:项目根目录 application.properties classpath:项目根目录/config application.properties classpath:项目根目录 application.properties a.如果某项配置冲突,则优先级从上往下 b.如果不冲突,则互补结合使用 配置项目名: properties文件中 server.servlet.context-path=/boot b.项目外部的配置文件: 在项目Run.configuration,arguments: --spring.config.location=文件路径 如果同一个配置同时存在于内部配置文件,和外部配置文件,则外部>内部 HW.jar运行 8881--->8882 外部配置文件,不需要再次修改内部配置文件,可在原jar包配置基础上直接调用 通过命令行调用外部配置文件 java -jar 项目.jar --spring.config.location=D:/application.properties 第三种方式:项目运行参数(补救): 在项目Run configuration,arguments: --server.port=8883 多个地方配置时,如果冲突,优先级: 命令行参数(调用外部的配置文件>运行参数)>内部文件(properties)>yml 日志: 日志框架 UCL JUL jboss-logging,logback,log4j,log4j2,slf4j... spring boot默认选用slf4j,logback spring boot默认配置好日志,直接使用即可 日志级别: TRACE<DEBUG<INFO<WARN<ERRPR<FINAL<OFF 自定义日志级别: springboot默认的日志级别是info(即只打印info及之后级别的信息);也可以自定义级别:全局配置文件中 logging.level.com.demo(主配置类所在包)=warn(日志打印级别) 可以通过配置将日志信息存储到文件中logging.file=springboot.log 存储到了项目的根目录中的springboot.log 也可以指定具体的日志路径:logging.file=D:/springboot.log 也可以存储到一个文件夹中,logging.path=D:/log/.并且默认的文件名是spring.log 指定日志显示格式: a.日志显示在consoles中 logging.pattern.console=%d{yyyy-MM-dd}[%thread]%-5level %logger{50} -%msg-%n %d:日期时间 %thread:线程名 %-5level:显示日志级别,-5表示从左显示5个字符宽度 %logger{50}:设置日志长度 %msg:日志消息 %n:回车 b.日志显示在文件中:logging.pattern.file=%d{yyyy-MM-dd}[%thread]%-5level %logger{50} -%msg-%n 同上 Springboot开发web项目(静态资源html css js) new -spring starter -设置(选择需要的场景,web) spring boot是一个jar,因此 静态资源就不是再存到webapps中,存放在哪里? 静态资源的存放路径通过WebMvcAutoConfiguration类 --addResourceHandlers()指定:/webjars/ spring boot将静态资源存入到jar包中,引入:从jar目录结构 的webjars开始写:http://localhost:8080/webjars/ 如何自己写静态资源,如何放到soring boot中?将自己写的静态资源--->jar,同上(不推荐); 推荐: spring boot约定:spring boot将一些牧流资源存放目录,将静态资源直接放入这些目录 在类中的"CLASSPATH:/META-INF/resources/" 网站中 网页的标签的logo是固定的名字:favicon.ico 自定义 favicon.ico:阅读源码可知:只需要将favicon.ico文件放入任意静态资源目录中即可 总结: 1.通过源码发现静态资源的目录 2.用静态资源:只需要将静态资源放入以上目录即可 3.其他特定的文件(欢迎页、ico),只需要根据约定(index.html favicon.ico)放入该静态资源目录 如何自定义静态资源目录(Properties文件中的prefix+属性): spring.resources.static-locations=classpath:/res/,classpath:/img/ 以上就将静态资源目录设置为了classpath:/res/,classpath:/img/,注意自定义静态资源目录后 动态资源:JSP(springboot默认不支持JSP): 推荐:模板引擎:(模板+数据) 网页=模板+数据 引入thymeleaf: 到springboot官网复制thymeleaf的依赖 使用thymeleaf: ThymeleafAutoConfiguration、 属性值修改: XxProperties 使用thymeleaf只需要将文件放入目录:“classpath:/templates/”;文件的后缀:".html"; th就是替换html原有的值 th:text 获取文本值 <h1>hello<h1> 将hello渲染为h1后的效果 th:utext 获取文本值(不转义) 显示 <h1>hello<h1> Spring boot 整合JSP开发: 之前springboot默认 自带一个内置的tomcat,不需要打war包,直接通过jar即可运行 但是,如果要整合jsp开发,就需要单独配置一个外置的tomcat,需要打war包 1.新建SpringBoot项目,war 注意: <dependency> <group>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> <dependency> provided:意思是将项目打包时,不需要讲内置的tomcat一起打包 2.建立基本的项目所需要的目录结构 webapps/WEB-INF (需要) webapps/WEB-INF/web.xml (不需要) 3.创建一个tomcat实例,并部署项目 如果是一个war包的整合的springboot项目,在启动服务器tomcat时,会自动调用ServletInitializer类中的configure方***调用springboot的主配置类 在启动tomcat服务器时 1.会启动tomcat服务器 2.通过configure方法启动springboot的主配置类 | |
| | |