zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    DataTable 中varchar 转换为 Double 后重新 排序。
    asp.net 后台实现删除,划掉效果
    word2007二级标题自动编号不从大标题开始的解决方法
    asp.net 多个文件同时下载
    asp 时间倒数后按钮可用
    js获取gridview模板列中textbox行列的值
    JS错误 theForm.submit();SCRIPT3: 找不到成员。
    JS验证 只能输入小数点,数字,负数。
    关于SQLServer2008数据如何导入SQL2005的解决办法,高版本数据导入低版本中。
    asp.net中TreeView的大数据加载速度优化
  • 原文地址:https://www.cnblogs.com/cascle/p/12041288.html
Copyright © 2011-2022 走看看