springboot的配置及原理

什么是springboot?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置
一站式整合所有应用框架的框架;并且完美整合Spring技术栈; https://spring.io/projects

一、springboot的优点

1.用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)
2.创建独立的spring引用程序 main方法运行
3.嵌入的Tomcat 无需部署war文件
4.简化maven配置
5.自动配置spring添加对应功能starter自动化配置

二、springboot常用的starter有哪些

可以去Maven仓库中搜索以下插件,pom文件依赖即可
Maven仓库官网:http://mvnrepository.com/
1.spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)
2.spring-boot-starter-data-jpa (数据库支持)
3.spring-boot-starter-data-redis (redis数据库支持)
4.spring-boot-starter-data-solr (solr搜索应用框架支持)
5.mybatis-spring-boot-starter (第三方的mybatis集成starter)

三、springboot自动配置的原理

1.@EnableAutoConfiguration这个注释告诉SpringBoot“猜”你将如何想配置Spring,基于你已经添加jar依赖项。如果spring-boot-starter-web已经添加Tomcat和Spring MVC,这个注释自动将假设您正在开发一个web应用程序并添加相应的spring设置。会自动去maven中读取每个starter中的spring.factories文件 该文件里配置了所有需要被创建spring容器中的bean
2.使用@SpringbootApplication注解 可以解决根类或者配置类(我自己的说法,就是main所在类)头上注解过多的问题,一个@SpringbootApplication相当于@Configuration,@EnableAutoConfiguration和 @ComponentScan 并具有他们的默认属性值

四、springboot读取配置文件的方式

springboot默认读取配置文件为application.properties或者是application.yml
application.properties.PNG
springboot集成mybatis的过程
添加mybatis的starter maven依赖

org.mybatis.spring.boot
mybatis-spring-boot-starter
1.2.0

在mybatis的接口中 添加@Mapper注解
在application.yml配置数据源信息

五、springboot如何添加【修改代码】自动重启功能

添加开发者工具集=====spring-boot-devtools

六、微服务

以前的模式是 所有的代码在同一个工程中 部署在同一个服务器中 同一个项目的不同模块不同功能互相抢占资源
微服务 将工程根据不同的业务规则拆分成微服务 微服务部署在不同的机器上 服务之间进行相互调用
Java微服务的框架有 dubbo(只能用来做微服务),spring cloud(提供了服务的发现,断路器等)

七、为什么使用Spring Boot

J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。
Spring Boot来简化Spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用

八、SpringBoot-HelloWorld初体验

如何完成 页面发送/hello 请求,服务器响应 “OK” 字符串;
1 创建maven工程
2 引入如下依赖

org.springframework.boot spring-boot-starter-parent 2.1.3.RELEASE org.springframework.boot spring-boot-starter-web 3 增加控制器 @Controller public class HelloController { @ResponseBody @GetMapping("/hello") public String handle01(){ return "OK!+哈哈"; } } 4 编写主程序 /** * 1、标了这个@SpringBootApplication的类(必须有main方法) 说明这是一个SpringBoot应用【主配置类,主程序类】 * 2、默认的约定: * 所有的组件都必须在@SpringBootApplication所在包或者下面的子包,才能被自动扫描到 * * 简单原理: * 1)、SpringBoot已经适配了所有的场景,我们相用引入这个场景的starter即可,剩下都是自动配置好的 * 2)、我们只需要写controller\service * 3)、嵌入式的tomcat * 2、简化部署 * 1)、引入springboot插件 * 2)、将应用打包 * 3)、直接双击或者使用java -jar 命令运行 ;里面已经有嵌入式的tomcat */ @SpringBootApplication public class MainApplication { public static void main(String[] args) { //Spring应用跑起来... SpringApplication.run(MainApplication.class, args); } } 5 运行访问 http://localhost:8080/hello

九 、SpringBoot-原理-简化依赖和配置

1 依赖管理

4.0.0
com.atgu
spring-boot-01
0.0.1-SNAPSHOT

org.springframework.boot spring-boot-starter-parent 2.0.7.RELEASE org.springframework.boot spring-boot-starter-web
<!-- <build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
-->

十 、SpringBoot-原理-简化部署

1 引入springboot插件

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build> 

2 将应用打包:package命令,使用插件和不使用插件打成的jar包是有区别的
java -jar xxx.jar
3 直接双击或者使用java -jar 命令运行;里面已经有嵌入式的tomcat

十一、 快速创建SpringBoot应用

1 创建Spring Starter Project; 必须联网创建

2 选择版本,引入需要的依赖

3 项目结构
? 自动生成主程序类,用于启动项目
? 自动生成静态资源目录及属性配置文件
? 自动生成测试类
? 自动增加pom.xml相关依赖配置

4 增加控制器类
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

//@ResponseBody
//@Controller

@RestController
public class HelloController {

@GetMapping("/hello")
public String handle01(){
return “OK!+哈哈”;
}

}
5 运行测试
? http://localhost:8080/hello
? 在static文件下下存放java.jpg图片, http://localhost:8080/java.jpg
? 在application.properties设置
端口,server.port=8081, http://localhost:8081/hello
上下文路径,server.servlet.context-path=/a ,http://localhost:8081/a/hello

https://docs.spring.io/spring-boot/docs/2.0.7.RELEASE/reference/htmlsingle/#common-application-properties
server.session.timeout=60
server.tomcat.max-threads=800
server.tomcat.uri-encoding=UTF-8

十二 、 SpringBoot-yml配置文件

1 配置文件
? SpringBoot使用一个全局的配置文件,配置文件名是固定的;
? application.properties
? application.yml
o 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;
o YAML(YAML Ain’t Markup Language)
o YAML A Markup Language:是一个标记语言
o YAML isn’t Markup Language:不是一个标记语言;
? 标记语言:
o 以前的配置文件;大多都使用的是 xxxx.xml文件;
o YAML:以数据为中心,比json、xml等更适合做配置文件;
o YAML:配置例子
server:
port: 8081
? XML:

8081

2 YAML语法
2.1 YAML基本语法
? 使用缩进表示层级关系
? 缩进时不允许使用Tab键,只允许使用空格。
? 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
大小写敏感
2.2 YAML 支持的三种数据结构
? 对象:键值对的集合
? 数组:一组按次序排列的值
? 字面量:单个的、不可再分的值
3 值的写法
3.1 字面量:普通的值(数字,字符串,布尔)
? k: v:字面直接来写;
? 字符串默认不用加上单引号或者双引号;
? “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
? name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi
? ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据
? name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
3.2 对象、Map(属性和值)(键值对):
? k: v:在下一行来写对象的属性和值的关系;注意缩进
? 对象还是k: v的方式
friends:
lastName: zhangsan
age: 20
? 行内写法:
? friends: {lastName: zhangsan,age: 18}
3.3 数组(List、Set)
用- 值表示数组中的一个元素
pets:
‐ cat
‐ dog
‐ pig
行内写法
pets: [cat,dog,pig]

十三 、SpringBoot-自动配置原理

1 自动配置原理
? SpringBoot所有的东西都自动配置好了;
1)、spring-boot-autoconfigure-2.0.7.RELEASE.jar(自动配置包)
2)、好多的场景全部自动配置好
? 自动配置原理:
1)、主程序类标注了@SpringBootApplication注解相当于标注了@EnableAutoConfiguration
2)、@EnableAutoConfiguration 开启SpringBoot的自动配置功能
? 就会自动的将所有的自动配置类导进来
如:HttpEncodingAutoConfiguration(http编码的自动配置)
1)、@ConditionalOnXX根据当前系统环境判断我这个类的所有配置是否需要生效
2)、会发现这些配置类中使用@Bean给容器中放了好多组件,这些组件就生效;
3)、这些组件会从一个类中(配置文件属性值的封装类)获取到它应该使用的值是什么。比如HttpEncodingProperties获取charset
4)、这写配置文件值的封装类都是和配置文件一一绑定
@ConfigurationProperties(prefix = “spring.http.encoding”)
HttpEncodingProperties
? 使用心得:
1)、SpringBoot帮我们配好了所有的场景
2)、SpringBoot中会有很多的 xxxxAutoConfigurarion(帮我们给容器中自动配好组件)
3)、xxxxAutoConfigurarion给容器中配组件的时候,组件默认的属性一般都是从 xxxProperties中获取这些属性的值
4)、xxxProperties 是和配置文件绑定的(属性一一对应)
5)、我们改掉这些默认配置即可;
6)、如果默认的组件我们不用;
@Bean
@ConditionalOnMissingBean:容器中没这个组件
public InternalResourceViewResolver defaultViewResolver()
SpringBoot的一个最大策略:自定义组件用自己的,否则,使用默认的。
2 自定义配置类
视图解析需要将thymeleaf模块引入项目中。
@Configuration
public class AppConfig {
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".html");
return resolver;
}
}

十四 、 SpringBoot-整合mybatis-配置版

1 创建Spring Starter Project
增加web,jdbc,mybatis,mysql相关组件
2 增加application.yml
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.137.3:3306/atcrowdfunding?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/mapper/*.xml
3 增加实体类:TAdmin
4 增加Mapper接口
public interface AdminMapper {
public TAdmin getAdminById(Integer id);
}
5 增加映射配置文件

<?xml version="1.0" encoding="UTF-8"?> SELECT * FROM `t_admin` WHERE id=#{id} 6 增加控制器 @RestController public class UserController { @Autowired AdminMapper adminMapper; @GetMapping("/getAdminById") public TAdmin getAdminById (Integer id){ return adminMapper.getAdminById(id); } } 7 增加mybatis主配置文件 <?xml version="1.0" encoding="UTF-8" ?> 8 增加mapper扫描 /** * 和Mybatis的整合 * 1)、在配置文件中指明mybatis全局配置文件和Sql映射文件的位置 * 2)、扫描mybatis的所有mapper接口 */ @MapperScan("com.atgu.mapper") @SpringBootApplication public class SpringBoot03Application { public static void main(String[] args) { SpringApplication.run(SpringBoot03Application.class, args); } }

十五 、 SpringBoot-整合mybatis-注解版

1 创建Spring Starter Project
增加web,jdbc,mybatis,mysql相关组件(可以拷贝上一个项目进行实验)
2 增加application.yml
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.137.3:3306/atcrowdfunding?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
3 增加实体类:TAdmin
4 增加Mapper接口
@Mapper //加不加都行
public interface AdminMapper {
@Select(“SELECT * FROM t_admin WHERE id=#{id}”)
public TAdmin getAdminById(Integer id);

@Insert("INSERT INTO t_admin(loginacct,userpswd,username,email,createtime) "

  • “VALUES(#{loginacct},#{userpswd},#{username},#{email},#{createtime})”)
    public void insertAdmin(TAdmin admin);
    }
    5 增加控制器
    package com.atguigu.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.atguigu.bean.TAdmin;
import com.atguigu.mapper.AdminMapper;

@RestController
public class UserController {

@Autowired
AdminMapper adminMapper;

@GetMapping("/user")
public TAdmin admin(Integer id){
return adminMapper.getAdminById(id);
}

}
6 增加mapper扫描
/**

  • 和Mybatis的整合
  • 1)、在配置文件中指明mybatis全局配置文件和Sql映射文件的位置
  • 2)、扫描mybatis的所有mapper接口
    */
    @MapperScan(“com.atgu.mapper”)
    @SpringBootApplication
    public class SpringBoot03Application {
    public static void main(String[] args) {
    SpringApplication.run(SpringBoot03Application.class, args);
    }
    }

十六 、 SpringBoot-整合Druid数据源

1 使用方式一
1.1 增依赖

com.alibaba druid 1.1.12 1.2 配置数据源 spring: datasource: username: root password: root url: jdbc:mysql://192.168.137.3:3306/atcrowdfunding?useSSL=false&useUnicode=true&characterEncoding=UTF-8 driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource 1.3 测试 @RunWith(SpringRunner.class) @SpringBootTest public class SpringBoot03ApplicationTests { @Autowired DataSource dataSource;

/*

  • HikariDataSource 默认数据源,性能很高
  • DruidDataSource 使用很高,很稳定
    /
    @Test
    public void contextLoads() throws SQLException {
    System.out.println(dataSource.getClass());
    Connection connection = dataSource.getConnection();
    System.out.println(connection);
    connection.close();
    }
    }
    2 使用方式二
    2.1 配置数据源
    spring:
    datasource:
    username: root
    password: root
    url: jdbc:mysql://192.168.137.3:3306/atcrowdfunding?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    2.2 创建数据源
    @Configuration
    public class AppConfig {
    @ConfigurationProperties(prefix = “spring.datasource”) //将数据库连接信息直接封装到数据源对象中
    @Bean
    public DataSource dataSource() throws SQLException {
    DruidDataSource dataSource = new DruidDataSource();
    dataSource.setFilters(“stat”);//配置监控统计拦截的filters
    return dataSource;
    }
    }
    3 Druid监控使用情况
    3.1 增加配置
    //配置Druid的监控
    //1、配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean statViewServlet() {
    ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/
    ");
    Map<String, String> initParams = new HashMap<>();
    initParams.put(“loginUsername”, “admin”);
    initParams.put(“loginPassword”, “123456”);
    initParams.put(“allow”, “”);// 默认就是允许所有访问
    initParams.put(“deny”, “192.168.15.21”);//拒绝哪个ip访问
    bean.setInitParameters(initParams);
    return bean;
    }
    //2、配置一个web监控的filter
    @Bean
    public FilterRegistrationBean webStatFilter() {
    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;
    }
    3.2 如果无法打印监控语句
    可以设置dataSource.setFilters(“stat”); 或者spring.datasource.filters=stat

十七、 SpringBoot-整合Web组件-注解版

之前的Web开发基于Servlet 2.5规范(在web.xml中配置Servlet,Filter,Listener)。
现在基于Servlet 3.0规范(基于配置类的方式声明对象:@WebServlet @WebFilter @WebListener)
1 监听器@WebListener
@WebListener
public class HelloListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println(“应用销毁了…HelloListener”);
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println(“应用启动了…HelloListener”);
}
}
2 过滤器@WebFilter(urlPatterns="/")
@WebFilter(urlPatterns="/
")
public class HelloFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
System.out.println(“HelloFilter…放行之前”);
arg2.doFilter(arg0, arg1);
System.out.println(“HelloFilter…放行之后”);
}
@Override
public void init(FilterConfig arg0) throws ServletException {

}
}
3 Servlet @WebServlet(urlPatterns="/my")
package com.atguigu.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns="/my")
public class MyServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write(“MyServlet do…”);
}
}
4扫描组件@ServletComponentScan
@ServletComponentScan
@MapperScan(“com.atgu.mapper”)
@SpringBootApplication
public class SpringBoot03Application {

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值