SpringBoot使用详解

概念

Spring Boot的启动器实际上就是一个依赖。这个依赖中包含了整个这个技术的相关jar包,还包含了这个技术的自动配置,以前绝大多数XML配置都不需要配置了。
如果是Spring自己封装的启动器的artifact id名字满足:spring-boot-starter-xxxx,
如果是第三方公司提供的启动满足:xxxx-spring-boot-starter。
以后每次使用Spring Boot整合其他技术时首先需要考虑导入启动器。

Spring Boot版本介绍

  1. SNAPSHOT:快照版,即开发版。
  2. CURRENT:最新版,但是不一定是稳定版。
  3. GA:General Availability,正式发布的版本。

hello world

1.项目继承spring-boot-starter-parent
原因: spring-boot-starter-parent中规定了各种jar包版本,可以避免jar包版本冲突

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.4</version>
</parent>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

如果已经有父工程了Spring Boot用了继承就不能继承别的项目了。所以Spring Boot还提供了依赖的方式。
使用dependencyManagement进行jar包版本管理
dependencyManagement可以在本项目和子项目中使用

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
</dependencies>
    
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.7.4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement> 

2.新建启动类
​ Spring Boot的启动类的作用是启动Spring Boot项目,是基于Main方法来运行的。
​ 注意:启动类在启动时会做注解扫描(@Controller、@Service、@Repository…),扫描位置为同包或者子包下的注解,所以启动类的位置应放于包的根下。(扫描同一路径下的所有类的注解,注意是注解,xml文件不能扫描)

// 启动类
// 可以自动扫描当前类所在包及子包的注解
// 注意:此类要放入到包中
@SpringBootApplication
public class MyApplication {
    public static void main(imagesString[] args) {
        SpringApplication.run(MyApplication.class,args);
    }
}

新建控制器

@Controller
public class DemoController {
    @RequestMapping("/show")
    @ResponseBody
    public String show(){
        return "hello";
    }
}

Spring Boot配置文件

1.Properties格式
2.YML格式
如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
​如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的

注意:static该目录是SpringBoot可以直接识别的目录,会将其中的静态资源编译到web项目中,并放到tomcat中使用。静态资源的访问路径中无需声明static。例如: http://localhost:8080/a.png
IDEA中经常出现放在static下的静态文件即使重启也不被编译。需要通过Maven面板进行清空缓存,重新编译启动即可识别。
启动
访问localhost:8080/show

1.Spring Boot整合MyBatis

添加依赖

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

yml中配置连接信息

# 数据源(数据库连接池) 配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: fsfs

# 加载MyBatis的mapper.xml
mybatis:
  mapper-locations: classpath:mybatis/*.xml

创建service层,在Mapper报下所有接口加上@Mapper注解或在启动类上加@MapperScan(“接口路径”)
在serviceImp上加上@Service注解
调用执行

如果xml文件和Mapper接口在同一目录下springboot是扫描不到的
1.需要配置资源拷贝插件让xml能扫描到
2.同时还要配置yml中的mybatis的mapper映射路径:
1和2都要配置才行
1.mybatis映射路径

mybatis:
  mapper-locations: classpath:com/example/demo/mapper/*.xml

2.资源拷贝插件

<build>
        <resources>
            <!-- 扫描src/main/java下所有xx.xml文件 -->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <!-- 扫描resources下所有资源 -->
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

2.Spring Boot整合Druid

添加依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      # 连接池的配置信息
      # 初始化大小,最小,最大
      initial-size: 5
      max-active: 30
      min-idle: 5
      # 配置获取连接等待超时的时间
      max-wait: 60000
      validation-query: SELECT 1 FROM DUAL
      #配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 300000
      test-while-idle: true
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filters: stat,wall,slf4j
      # 配置DruidStatViewServlet
      stat-view-servlet:
        # 登录名
        login-username: admin
        # 登录密码
        login-password: admin
        url-pattern: /druid/*
        # IP白名单(没有配置或者为空,则允许所有访问)
        allow: 192.167.10.1,127.0.0.1
        reset-enable: false
        # 必须启用,要不会404
        enabled: true

3.SpringBoot整合Junit4

添加启动器

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

注意:

  1. 测试类不能叫做Test
  2. 测试方法必须是public
  3. 测试方法返回值必须是void
  4. 测试方法必须没有参数
    测试
    注意:在springBoot2.4之前 使用整合单元测试需要写 @SpringBootTest (classes={启动器类名.class})和RunWith(SpringRunner.class)
// 当前类为测试类
@SpringBootTest
public class MyTest {
    @Autowired
    UserMapper userMapper;
    @Autowired
    private UserService userService;
    @Test
    public void test(){
        User user = userMapper.selectById(1L);
        System.out.println(user);
        System.out.println(userService.test());
    }
} 

4.Spring Boot整合PageHelper

Spring Boot整合PageHelper不需要做任何配置文件的配置,添加依赖后就可以直接使用。
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

代码中一定要注意,要把PageHelper.startPage()写在查询数据库代码之上。
测试:

// pageNumber为当前页码 pageSize为页大小
PageHelper.startPage(pageNumber,pageSize);
// 查询全部,查询方法必须是查询多行结果,且没有分页语法。否则无法在sql后面拼接limit子句。
List<POJO> list = tbItemMapper.selectAll();
// PageInfo是分页查询所有查询结果封装的类,所有的结果都从这个类取
PageInfo<TbItem> pi = new PageInfo<>(list);
System.out.println(pi.getList());
System.out.println(pi.getTotal());

5.Spring Boot整合logback

​ Spring Boot默认使用Logback组件作为日志管理。Logback是由log4j创始人设计的一个开源日志组件。在Spring Boot项目中我们不需要额外的添加Logback的依赖,因为在spring-boot-starter或者spring-boot-starter-web中已经包含了Logback的依赖。
Logback读取配置文件的步骤:
1.在classpath下查找文件logback-test.xml
2.如果文件不存在,则在classpath下查找logback.xml

注意:我们可以通过yml配置方式开启日志, 这种不需要导入logback.xml

#不改变日志类型和日志规则 只开启mybatis中对应SQL的日志
logging:
  level:
    com.bjsxt.mapper: trace

6.SpringBoot异常处理

1.springBoot中异常处理页面
直接在 templates中新建文件夹名称error文件的名称就是异常的状态码―例如 500.html 5xx.html如果没有找到合适的异常跳转页面就会找templates中error.html
扩展名取决于使用的java模板引擎
设置具体的状态码页面
在templates下新建error文件夹,在error中新建:状态码.html的页面。例如当出现500时显示的页面为500.html/ftlh
使用x进行模糊匹配
当出现5开头状态码的错误时,显示页面可以命名为5xx.html

当出现50开头状态码的错误时,显示页面可以命名为50x.html
500.html >5xx.html > error.html

2.异常处理
在控制器类中添加一个方法,结合@ExceptionHandler。但是只能对当前控制器中方法出现异常进行解决。

@Controller
public class UsersController {
    @RequestMapping("showInfo")
    public String showInfo(){
        String str = null;
        str.length();
        return "ok";
    }
    @ExceptionHandler(value = {java.lang.NullPointerException.class} )
    public ModelAndView nullpointExcepitonHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    }
}

通过@ControllerAdvice与@ExceptionHandler注解处理异常

/**
 * 全局异常处理类
 */
@ControllerAdvice
public class GlobalException {
    @ExceptionHandler(value = {java.lang.NullPointerException.class} )
    public ModelAndView nullpointExcepitonHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error1");
        return mv;
    }

    @ExceptionHandler(value = {java.lang.ArithmeticException.class} )
    public ModelAndView arithmeticExceptionHandler(Exception e){
        ModelAndView mv = new ModelAndView();
        mv.addObject("err",e.toString());
        mv.setViewName("error2");
        return mv;
    }
}

3.通过SimpleMappingExceptionResolver对象处理异常

/**
 * 全局异常 
 * SimpleMappingExceptionResolver
 */ 
@Configuration
public class GlobalException2 {

    /**
     * 此方法返回值必须是SimpleMappingExceptionResolver对象
     * @return
     */
    @Bean
    public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){
        SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
        Properties properties = new Properties();
        /*
         * 参数一:异常类型,并且是全名
         * 参数二:视图名称
         */
        properties.put("java.lang.NullPointerException","error3");
        properties.put("java.lang.ArithmeticException","error4");

        resolver.setExceptionMappings(properties);
        return resolver;
    }

}

4. 通过自定义HandlerExceptionResolver对象处理异常

@Component
public class GlobalException3 implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object handler, Exception e) {
        ModelAndView mv = new ModelAndView();
        //判断不同异常类型,做不同视图的跳转
        if(e instanceof NullPointerException){
            mv.setViewName("error5");
        }
        if(e instanceof ArithmeticException){
            mv.setViewName("error6");
        }
        mv.addObject("error",e.toString());
        return mv;
    }
}

7.Spring Boot中Bean管理

访问权限修饰符没有强制要求,一般是protected
返回值就是注入到Spring容器中实例类型。
方法名没有强制要求,相当于bean 中id属性。也就是bean的注入名称

如果bean中的类还有类对象,直接在@bean上加入另一个类的对象,可以使用@Qualifier(“”)指定别名

@Configuration
public class MyConfig {
    @Bean
    protected User jqk(){
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        return user;
    }
    // 自定义bean名称
    @Bean("nml")
    protected  User abc(){
        User user = new User();
        user.setId(2L);
        user.setName("李四");
        return user;
    }
}

测试:

@SpringBootTest
public class test {
    @Autowired
    @Qualifier("jqk")
    private User abc;
    @Test
    public void test(){
        System.out.println(abc);
    }
}

8.SpringBoot拦截器

创建实现拦截器的类
不要忘记类上注解@Component

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("pre");
        return false;
    }
}

注册拦截器
​ 注意:
类上有注解@Configuration。此类相当于SpringMVC配置文件。也可以使用@SpringBootConfiguration

@SpringBootConfiguration
public class Myconfig implements WebMvcConfigurer {
    @Autowired
    private MyInterceptor myInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    	/注册拦截器,可以注册多个
        registry.addInterceptor(myInterceptor).addPathPatterns("/*").excludePathPatterns("/login");
    }
}

9.Spring Boot 开发者工具

开发者工具作用:
​ 使用开发者工具包不需要重启。监听内容改变。
导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

在这里插入图片描述
修改Registry
​ Ctrl+Shift+Alt+/ 点击弹出框中Registry…

在这里插入图片描述

重新服务器再次改变代码,服务器会自动监听启动

10.SpringBoot项目打包成jar包

添加SpringBoot打包插件

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

点击IDEA右侧Maven – > Lifecycle --> install
打包后的内容出现在target根目录
运行jar包项目
java -jar 文件名.jar

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值