SpringBoot最新教程IDEA版【狂神说Java系列】

Spring Boot入门

1.spring boot是配置好的spring集成框架,约定大于配置

2.微服务:把service拆出来独立运行在各个机器上。看下面这两篇论文

3.从官网下模板创建spring boot项目

https://start.spring.io/里找generate项目,下载zip包,用Idea以maven形式导入

4.通过Idea的Spring Initializer创建

以上二种方式,要自己选依赖的组件

pom开头parent标签指定父依赖是spring-boot-starter-parent,负责版本管理与打包

web主要依赖包是spring-boot-starter-web 

热部署是spring-boot-starter-devtools

4.项目架构

1.java下的程序主入口:

2.resource下的application.properties

3.resource下的static目录

4.resource下的templates目录

5.springboot的主类用SpringBootApplication注解装配,他会去扫描同级目录下的包注解

6.配置文件修改

server.port=8081 #改端口号,每一个springboot服务一个端口

7.导出的jar包用java jar包路径运行即可

8.resource目录下可以放banner.txt放启动字符

9.自动配置原理:

看pom文件,点入父标签,进入可以看到spring-boot-dependencies依赖

SpringApplication run方法启动程序 

注解:@SpringBootApplication

  1. @SprintBootConfiguration
    1. @Configuration
    2. @Component
  2. @EnableConfiguration
    1. AutoConfigurationPackage  

总结下来,就是会找sprint-boot-autoconfigure包里的/META-INF/spring.factories文件,当引入某个starter时相应的配置生效

10.主类:

SpringApplication类注解初始化项目,SpringApplication的run方法拿这些配置来跑

11.yaml配置文件

格式:

key: value

server:
    port: 8081
    path: /hello

yaml比properties先进的地方在于语法支持的多,甚至可以存储对象

双引号不转义,单引号转义

存对象

properties:

student.name="a"

yaml:

studnet:
    name: "a"

行内写法:

student: {name: "a", age: 12}

 数组:

行内写法:

studnet: 【{},{}】

 多行写法:

pets:
    - cat
    - dog

yaml 对空格的要求十分高,一定要对齐

 12.yaml配置注入:

 通过ConfigurationProperties注解指定prefix来引入配置

@ConfigurationProperties(prefix = "person")

13.Property文件注入

@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
    //直接使用@value
    @Value("${person.name}") //从配置文件中取值
    private String name;
    @Value("#{11*2}")  //#{SPEL} Spring表达式
    private Integer age;
    @Value("true")  // 字面量
    private Boolean happy;
    
    。。。。。。  
}

14.JSR303校验

@Validated注解表明要校验

可以接着使用其中定义的其他格式规范注解,比如@Email

 15.多config文件

可以在jar里用命令行参数spring.config.location指定config文件位置。默认是项目根目录下config,项目根目录, 资源根目录下config,资源根目录

用spring.profiles.acitve=test指定配置文件后缀

yml多文档模块:

---分割模块

spring:

  profiles: dev

指定模块名

 16.自动查看配置

注解@EnableConfigurationProperties指定配置类

@EnableConfigurationProperties({HttpProperties.class}) 

相应的@ConfigurationProperties注解就指定yaml和properties文件里的配置名称

@ConfigurationProperties(
    prefix = "spring.http"
) //从配置文件中获取指定的值和bean的属性进行绑定
public class HttpProperties {

@ConditionalOnWebApplication,@ConditionalOnClass,@ConditionalOnProperty等注解指定条件满足配置成立

精髓:

1)、SpringBoot启动会加载大量的自动配置类

2)、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3)、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

4)、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

xxxxAutoConfigurartion:自动配置类;给容器中添加组件

xxxxProperties:封装配置文件中相关属性;

  debug=true 属性指定是否打开debug

 所有配置可以从SpringBoot官方文档这里拿

Spring Boot Web开发

 17.导入静态资源

 webjars:以maven的形式引入jquery,放到jar包的META-INF/resources/webjars下

resources目录 ,static,public,根目录,也可以放资源,一般来说public的是外边可以通过地址直接访问的,不用走controller接口层

 或者指定spring.mvc.static-path-pattern(用逗号分隔),以上全部失效

18.首页定制:

根据property或者index.html文件放在相应资源目录下

 19.模板引擎

SpringBoot不支持jsp,使用模板引擎生成前端文件

可以用freemarker或者thymeleaf

 根据Thymeleaf的prperties配置类,可以知道文件以html结尾,放在templates文件夹里

20.Thymeleaf语法

html标签头加命名空间约束

<html lang="en" xmlns:th="http://www.thymeleaf.org">

语法分以下几部分:

  1. 取值
    1. [[${}]]行内取值
  2. 常量
  3. 运算符
  4. 条件表达式:th:if
  5. 循环表达式:th:each
  6. th命名空间下的标签

    th标签可以替换html里的任意元素

21.拓展SpringMVC的配置

写一个类用@Config注解标注,并实现WebMvcConfigurer接口。要完全替换则再加一个@EnableWebMvc注解。

 可以通过@Bean注解,把这个类里的关于SpringMVC的配置发送出去

22.前端怎么写

  1. 模板:别人写好的自己改
  2. 框架:不用改,自己装配传参拼接(组件)
    1. 栅格系统
    2. 导航栏
    3. 侧边栏
    4. 表单

23.网站怎么么写:

  1. 页面长什么样
  2. 数据设计
  3. 前端自动运行(独立化工程)
  4. 数据接口如何对接
  5. 前后端联调测试

24.准备工作:

  1. 有一套自己熟悉的后台模板(x-admin)
  2. 前端通过框架,组合出来一个网站页面
    1. index
    2. about
    3. blog
    4. post
    5. user
    6. 404
  3. 部署网站

25.整合JDBC

1.引入jdbc和mysql驱动

2.resourcs下在application.yml 里配置数据库信息

spring:
  datasource:
    username: root
    password: 123456
    #?serverTimezone=UTC解决时区的报错
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.jdbc.Driver

3.DataSource可以通过@Autowired自动引入了

属性配置可以去点击进去类DataSourceProperties看

默认使用Hikari数据源连接池

Connection可以通过datasource getConnection获取

随后可以做commit,close等操作

26.jdbc template crud

1.自动引入JdbcTemplate

2.execute执行sql语句,query和queryForList等方法查询,call调用存储过程/函数,update和batchUpdate等方法更新

27.指定数据源

spring.datasource.type指定数据源,要是全限定名

28.整合Druid

加入了日志监控功能的数据库连接池

1.maven导入依赖

2.配置文件指定数据库连接池类名

3.配置插件,包括监控,性能慢查询等

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

4.引用了log4j插件,就要导入这个依赖

5.自己添加一个@Configuration注解修饰的Druid配置类,把DruidDataSource注入到spring。要绑定配置文件的全局配置,使用@ConfigurationProperties注解,prefix指定为spring.datasoure

6.配置Druid的监控web页面,可以通过spring boot注册一个servlet(ServletRegistrationBean),配置登陆的用户名/密码等

7.配置FilterRegistrationBean来设置监控哪些东西

29.整合Mybatis

1.引入mybatis-spring-boot整合包

2.配置数据源

3.使用@Mapper注解定义mapper接口

4.添加sql xml

5.配置文件里配置mapper和实体类路径

 #指定myBatis的核心配置文件与Mapper映射文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 注意:对应实体类的路径
mybatis.type-aliases-package=com.kuang.mybatis.pojo

6.自动装配拿到mapper

@Mapper注解,怎么被扫描到,mapper xml放的位置配置,可以总结下

30. 异步任务

@EnableAsync,开启异步

@Async注解,表明方法异步执行。spring自动给方法开线程执行

31.邮件任务

1.引入邮件依赖

2.去autoconfig里找配置前缀,去proerty里找具体配置

3.@Autowired注入JavaMailSenderImpl,调用其方法设置并发送

32.定时执行任务

1.TaskExecutor

2.TaskScheduler

3.@EnableScheduling,开启定时任务注解;@Scheduled,表示什么时候执行

4.Cron表达式,使用在线表达式生成器 

33.Swagger

 API框架,开发阶段浏览API接口,可自动生成API文档,RestFul风格,可以直接运行在线测试,

1.引入依赖,有两个,swagger2和swagger-ui

2.集成swagger。添加config类,@Configuration,@EnableSwagger2。访问swagger-ui.html

3.配置swagger。config类里添加@Bean Docket,配置Docket类。ApiInfo类配置信息

4.配置扫描接口。Docket select方法决定扫描哪些接口。使用api().build()来选择,可以使用RequestHandlerSelectors,用其basePackage指定扫描基准包;path方法设置指定路径,

5.配置开关 。enable方法决定是否开启。可以通过Profiles和Environment获取配置文件的环境变量

6.给api分组。通过groupName方法

7.实体类配置(Model)。 只要接口用到了实体类,实体类就会被扫描到。进一步的注释,@ApiModel指定实体类,@ApiModelProperty给字段添加,这种注解还有很多

34.员工管理系统

1.引入模版html页面,放入templates文件夹

2. css和js,img放入static文件夹

3.添加首页路由映射,除了直接用@controller,还可以在WebMvcConfigure的子类里,实现addViewController方法,用ViewControllerRegistry.addViewController方法添加

4.spring.thymeleaf.cache=false,禁用缓存;其他地方搞的模版,url路径等配置要用thymeleaf接管

5.server.servlet.context-path=/kunag,设置项目虚拟目录,给url路径加一层,本地是项目上一级多了一个文件夹

6.页面国际化:

  1.resources目录下建立一个i18n目录

  2.建立login.properties和login_zh_CN.properties文件。自动创建一个login文件夹,可在Resource Bundle下配置,给每一个key设置不同的版本

  3.给spring.message.basename指定为i18n.login,指定位置文件

  4.在模板文件里,用#{key}取值

  5.可以重写LocaleResolver,解析语言配置,返回Locale类。默认的语言配置,读取Accept-Language

  6.在WebMvcCofigure子类里,用@Bean注入这个LocaleResolver子类

7.除了重定向,可以用setViewName给url做映射来改url

8.登陆拦截器。实现HandlerInterceptor,在WebMvcConfigure的addInterceptors里添加拦截器

9.页面组件分类后,调用他们的时候可以给他们传参数,决定不同数据下的表现。代码要基于数据改变,而不是直接搞dom

10. 有错误的话,templates下新建一个error文件夹,相应错误码的html文件放进去即可

35.dubbo+zookeeper

RPC架构

架构为生产者/消费者模式

生产者向注册中心注册自己。消费者通过注册中心找到生产者,调用生产者方法

1.生产者先引入duooo+zookeeper依赖

    <!-- Dubbo Spring Boot Starter -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.3</version>
    </dependency> 
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
<dependency>
    <groupId>com.github.sgroschupf</groupId>
    <artifactId>zkclient</artifactId>
    <version>0.1</version>
</dependency>
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除这个slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.配置dubbo+zookeeper

#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.kuang.provider.service

3.用@Service注册服务到dubbo,用@Component注解注册到Spring

4.可以在duboo-admin里发现这个服务

消费者配置,先引入一样的依赖

配置应用名字与注册中心

#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:218

使用@Reference注解,可以用pom坐标,也可以在本地建立一个一模一样路径的接口,然后调用RPC接口

36.未来

 微服务架构,要有四个业务

1.API网管,服务路由

2.HTTP/RPC通信,同步/异步调用

3.服务注册,发现,治理,高可用

4.服务熔断,异常处理

有二代技术

第零点五代,Dubbo+zookeeper,无法实现全部方案

第一个代,SpringClound,由此各个公司推出了不同技术,比如SpringCloud NetFlix,SpringCloud Alibaba

第二代,Service Mesh技术,k8s,Istio,

这些业务,解决的是网络不可靠情况下的稳定性

y

原文地址:https://www.cnblogs.com/cascle/p/12041288.html