SpringBoot 学习随笔

SpringBoot 知识图

ps: 最下面四个都是中间件技术

这个里面SpringBoot知识很全(可以查查):

https://www.cnblogs.com/fishpro/p/10625506.html


认识SpringBoot


ssm项目打war包,在Tomcat里面运行

Springboot,jar包,内嵌Tomcat

SpringBoot 简化配置,约定大于配置(Maven、Docker也是)


IDEA快速创建 第一个SpringBoot程序


创建SpringBoot=>在IDEA里面直接创建,

选择

web项目最少需要

可以看到程序的主入口Application(含main)(不要改动):

下一步注意,几个文件夹位置都和Application同级别:

    

然后写个Controller:

    

然后浏览器访问:

           

好了,完成了SpringBoot--Web项目的 helloworld !


pom.xml

dependencies里面:

  spring-boot-starter-web=》web依赖:Tomcat默认嵌入式容器  dispatcherServlet xml ...

  spring-boot-starter-test=》单元测试

  (Springboot所有的依赖都是spring-boot-starter开头的)


1)application.properties  (另一种方法是用application.yaml)

  配置端口号:server.port = 8081这样设置端口号

2)艺术字:www.bootschool.net/ascii 自动生成banner

  在resources下面新建 banner.txt 会直接被识别

////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \|     |//  `.                         //
//                   /  \|||  :  |||//                          //
//                  /  _||||| -:- |||||-                         //
//                  |   | \  -  /// |   |                       //
//                  | \_|  ''---/''  |   |                       //
//                    .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;` _ /`;.`/ - ` : | |                 //
//               `-.   \_ __ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//                 佛祖保佑           永无BUG                       //
////////////////////////////////////////////////////////////////////

打jar包:

  

  生成的jar包在target里面

运行jar包:

  

  就可以像IDEA控制台一样运行起来了

  


 Springboot自动装配原理


pom.xml

dependencies 核心依赖在里面的<parent>父工程中

我们在引入springboot依赖的时候,不需要指定版本,就是因为有这些版本仓库

启动器 starter

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

-web 就帮助自动导入web环境所有依赖

main主程序

@SpringBootApplication
public class HelloworldApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloworldApplication.class, args);
    }
}

@SpringBootApplication

启动类下的所有资源被导入 

  @EnableAutoConfiguration自动导入包 

    @Import(AutoConfigurationImportSelector.class)自动导包选择器 

      loadSpringFactories():

       spring.factories这个文件里面写了:所有的自动配置类(核心注解@ConditionalOnXXX,只有用户要求的才会导入,这里的全部类中只会导入用户想导入的那部分)



SpringApplication.run()

  

图大概看下即可:

   


 yml配置

 


@ConfigurationProperties 通过prefix来将yaml的值注入到class里面:

 


 

 ${ }  //el表达式



JSR303校验  @Validated(类之前) +@...(对象之前)

 

 在上方自动生成的import里面可以找到源码位置:

 


 多环境配置&配置文件位置

配置文件加载顺序(对properties&yaml)

 

1).properties格式 (看下即可)

application.properties   (默认环境)

+ 测试环境、开发环境、生产环境...

application-test.properties   

application-dev.properties   

application-prod.properties   

三个非默认环境,都需要application.properties来设置:

2).yaml格式()

application.yaml

yaml文件一个就搞定,各个环境之间用"- - -"三个横杠分隔


自动装配原理再理解 

所有的yaml可以配置的项(官方文档):https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/

  • xxxxAutoConfiguration():自动配置类,给容器中添加组件 (在META-INF.springfactories中)
  • xxxxProperties.java文件的class,从application.yaml 中获取对应的配置值

自动装配原理 -总结


 Web开发


静态资源一般放在resources/static里面


Thymeleaf模板引擎(jsp同类)

 源码:


 项目实战

国际化:i18n => internationalization

 就是在i18n里面,三个文件,一个是键、另外两个是键对应的中文、英文


Interceptor (登录)拦截器

登录拦截的时候,静态资源不要拦截,否则会比较丑。


杂碎知识:

 StringUtils.isEmpty()和.equals的运用


整合数据库

JDBC

需要在application.yml里面配置下数据库属性。

url问号后面3个设置

(点击username点进去,可以看spring.datasource文件,里面很多设置)


HikariDataSource号称javaweb当前最快的数据源


Druid

数据库连接池实现,结合了C3P0、DBCP、PROXOOL等DB池的优点,

同时加入了日志监控=》天生就是针对监控而生的DB连接池

 在yml配置中DataSource中加上druid就好了

 yml数据注入config  (prefix作为连接的桥梁标记)

 获取druid后台监控:

//1、配置管理后台的Servlet
    @Bean
    public ServletRegistrationBean DruidServlet(){
        ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        Map<String,String> initParams = new HashMap<>();
        //druid后台登录的用户名
        initParams.put("loginUsername","admin");
        //druid后台登录的密码
        initParams.put("loginPassword","111111");
        //默认就是允许所有访问
        initParams.put("allow","");
        bean.setInitParameters(initParams);
        return bean;
    }
//2、配置监控的filter
    @Bean
    public FilterRegistrationBean druidStatFilter(){
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.js,*.css,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        return  bean;
    }

Druid Monitor

后面自己动手来配置一下

https://www.jianshu.com/p/fae8fc159270


 Mybatis

 


权限Shiro

 

Authentication: 身份认证

Authorization: 授权

 

Subject:用户/主体

SecurityManager:管理所有用户

Realm:控制数据

下图是上图的详细版

流程步骤:

 

 下图对应上图

 


Spring Security

授权=》权限分类+每个分类能做的事

 (这里的role不正规,是基于资源的,而不是真正的分级角色)

认证=》账号密码+权限分类

 

 


swagger

首先导入2个maven包:

 

 

写一个swaggerConfig.java的配置类

 

http://localhost:8080/swagger-ui.html

 

给方法,添加注释:

 

 

正式发布的版本,关闭swagger

能扫描接口并测试==》直接扫现有的项目代码来调试~~


 Redis

1)         导入maven依赖

 

2)         配置类写下

 

3)然后开始用了:

 

 

 

 

redis配置模板RedisConfig.java

在真实的开发中,使用RedisUtils工具类


 分布式RPC:Dubbo

远程过程调用

 

Dubbo-admin: 监控管理后台

 

 


Zookeeper:注册中心


任务

异步任务=》多线程


邮件发送=mailSender


定时任务=timer

 

 

 

重点是:-/


SpringBoot项目结构 

后端主要是:
(1)Controller层:
后端接受前端的请求,先在Controller层拿数据,并进行基本的格式处理
(2)Service层:
将符合要求的数据请求传给Service层,进行逻辑上的处理
(3)Dao层:
借助mybatis,通过mapper文件夹下的xml文件进行持久层的相关操作

-----------------------代码层结构-----------------------

启动类:Application.java(配置和启动引导)
@SpringBootApplication 开启了Spring组件扫描和SpringBoot的自动配置功能

数据实体类:domain
jpa项目
mybatis项目

数据接口访问层:Dao
jpa项目
mybatis项目

mapper:mybatis的数据库操作xml文件

entity:实体类文件(class)

数据服务接口层:Service
数据服务实现层:Service Implements

前端控制器层:Controller

工具库类:utils
配置类config
数据传输对象:dto
视图包装对象:vo

src/main/java 程序代码
src/main/resources 资源

-----------------------资源目录结构-----------------------
根目录 resources
项目配置文件resources/application.yml
静态资源目录resources/static/ (用于存放前端html css js 图片等)
视图模板目录resources/templates/
mybatis映射文件 resource/mapper/
mybatis配置文件 resource/mapper/config/

原文地址:https://www.cnblogs.com/qyf2199/p/14524622.html