张春 发表于 昨天 10:06

SpringBoot3条记

简介:

springboot整合了springframework,整合了许多设置,让我们可以或许快速创建一个以springframework为底子的项目。
标题:
到现在为止,你已经学习了多种设置Spring步调的方式。但是无论利用XML、注解、Java设置类照旧他们的混实用法,你都会以为设置文件过于复杂和繁琐,让人头疼!
办理:
SpringBoot 帮我们简单、快速地创建一个独立的、生产级别的 Spring 应用(阐明:SpringBoot底层是Spring),大多数 SpringBoot 应用只须要编写少量设置即可快速整合 Spring 平台以及第三方技能!
SpringBoot总结:简化开辟,简化设置,简化整合,简化摆设,简化监控,简化运维。
快速入门

父工程的pom.xml

   <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <!-- springboot(将springboot提供的底子包做父工程) -->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>3.0.5</version>
    </parent>
    <groupId>com.atguigu</groupId>
    <artifactId>springboot-base-quick-01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 导入对应的启动器 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>
启动类

/**

 * 创建一个启动类
 * 步调:
 * 在该类上加上@SpringBootApplication代表此类是启动类
 *                该注解的作用:
 *                ①代表此类事设置类,
 *                ②自动加载设置 @EnableAutoConfiguration 自动加载其他设置类
 *                ③@ComponentScan 默认会扫描当前包/子包的注解
 * 在方法中通过 SpringApplication调用run()方法,传入当前类.class与args
 *                作用:
 *                ①创建ioc容器
 *                ②启动内置的web服务
 *                当运行该类时,自动创建ioc容器,启动tomcat服务器软件
 * 只要在启动类雷同的包或子包下加的注解就会被自动扫描
 */
   @SpringBootApplication//启动类
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);//自动创建ioc容器,启动tomcat服务器软件
    }
}
总结:

1. 为什么依靠不须要写版本?
    - 每个boot项目都有一个父项目`spring-boot-starter-parent`
    - parent的父项目是`spring-boot-dependencies`
    - 父项目 **版本仲裁中心**,把全部常见的jar的依靠版本都声明好了。
    - 比如:`mysql-connector-j`
https://i-blog.csdnimg.cn/direct/92ac9b92a5f24b409308059ea6289545.png

在父工程中已经做了依靠管理,以是在导入依靠时就不须要写版本了。

2 启动器(starter)是什么?(整合web开辟须要的全部依靠)
(我们的项目须要许多依靠web,servlet jackson等等,启动器会帮我们自动导好)
Spring Boot提供了一种叫做Starter的概念,它是一组预界说的依靠项聚集,旨在简化Spring应用步调的设置和构建过程。Starter包罗了一组干系的依靠项,以便在启动应用步调时自动引入所需的库、设置和功能。
紧张作用如下:
1. 简化依靠管理
2. 自动设置
3. 提供约定优于设置
4. 快速启动和开辟应用步调
5. 模块化和可扩展性
3 @SpringbootApplication的作用
@SpringBootApplication添加到启动类上,是一个组合注解,他的功效有详细的子注解实现!
@SpringBootApplication注解是Spring Boot框架中的核心注解,它的紧张作用是简化和加快Spring Boot应用步调的设置和启动过程。
详细而言,@SpringBootApplication注解起到以下几个紧张作用:
1. 自动设置:@SpringBootApplication注解包罗了@EnableAutoConfiguration注解,
2. 组件扫描:@SpringBootApplication注解包罗了@ComponentScan注解
3. 声明设置类:@SpringBootApplication注解本身就是一个组合注解,它包罗了@Configuration注解
总的来说,@SpringBootApplication注解的紧张作用是简化Spring Boot应用步调的设置和启动过程。它自动设置应用步调、扫描并加载组件,并将设置和启动类合二为一,简化了开辟者的工作量,进步了开辟服从。

同一设置管理  

 application.properties(同一文件):

 全部的设置文件都同一写在一个文件中,该文件的名称为application.properties或application.yml,且该文件必须放在src/main/resources目次下。这是由于src/main/resources目次是Spring Boot默认的类路径(classpath),设置文件会被自动加载并可供应用步调访问。
留意:
①固定的key设置一些参数
②自界说key
代码举例:
application.properties文件:
   #利用springboot提供的设置,修修改步调的参数,留意:key是固定的
server.servlet.context-path=/boot
#自界说设置
#怎样读取引用设置文件:直接在controller类中声明吸收该值的属性,然后用@value为其赋值即可
lq.name=刘清
lq.age=19
读取:
   controller类
    @Value("${lq.name}")
    private String name;
    @Value("${lq.age}")
    private int age;
application.yaml设置先容和利用

properties方式
web 设置服务器的端标语 项目根路径
key=value
出现的标题:
由于要为全部框架提供设置参数的位置,又要包管key不重复,以是key就会特别长-----------一样寻常不保举利用
保举利用以.yml或.yaml末了的application文件
yaml方式
   #yaml是条理,可以继续的设置文件格式
#比方:
server:
  port: 8080
  servlet:
    context-path: /boot
lq:
  info:
    age;18 #留意:key:空格value
#聚集设置
  gfs:
    - 高圆圆
    - 范冰冰
    - 二狗子
#yaml语法:
#  1. 数据布局用树形布局出现,通过缩进来表现层级,
#  2. 连续的项目(聚集)通过减号 ” - ” 来表现
#  3. 键值布局内里的key/value对用冒号 ” : ” 来分隔。
#  4. YAML设置文件的扩展名是yaml 或 yml
读取设置文件
读取方式和properties同等
#YAML格式相对于:properties文件具有更好的条理布局表现、自我形貌性、解释支持、多行文本表现、复杂数据范例支持和更好的可读性。
批量设置文件读取

/**
 lq:
 info:
 password:123456   #留意:key:空格value
 username:liuqing
 gfs:
 - 高圆圆
 - 范冰冰
 - a
 - b
 * 读取设置文件的
 *   方式一:利用@value注解
 *     直接在属性上添加,留意:@value是为组件属性赋值的,以是该类肯定要参加ioc容器
 *     ①@Value(key必须写全了)
 *     ②@Value只能读取单个值
 *   方式二:批量读取
 *   在实体类上添加一个@ConfigurationProperties(prefix = "lq.info")内里填通用的前缀
 *   上风:①方便不消一个一个读取
 *              ②可以给聚集范例赋值
 */
   @Component
@Data
@ConfigurationProperties(prefix = "lq.info")
public class User {
    private String password;
    private String username;
    private List<String> gfs;
}
多情况设置与激活 

1. 属性文件分离:将应用步调的设置参数分离到差异的属性文件中,每个情况对应一个属性文件。比方,可以创建`application-dev.properties`、`application-prod.properties`和`application-test.properties`等文件。在这些文件中,可以界说各自情况的设置参数,如数据库毗连信息、端标语等。然后,在`application.properties`中通过`spring.profiles.active`属性指定当前利用的情况。Spring Boot会根据该属性来加载对应情况的属性文件,覆盖默认的设置。
2. YAML设置文件:与属性文件雷同,可以将设置参数分离到差异的YAML文件中,每个情况对应一个文件。比方,可以创建`application-dev.yml`、`application-prod.yml`和`application-test.yml`等文件。在这些文件中,可以利用YAML语法界说各自情况的设置参数。同样,通过`spring.profiles.active`属性指定当前的情况,Spring Boot会加载相应的YAML文件。

https://i-blog.csdnimg.cn/direct/b32cb6a7a01b4ba2994730f1d6d09aa6.png

比方:
其他文件名---------application-key.yml
   application-dev.yml(开辟)
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql:///dev
      username: root
      password: root
    application-test.yml(测试)
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql:///test
      username: root
      password: root
    application-prod.yml(生产)
spring:
  jdbc:
    datasource:
      driverClassName: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql:///prod
      username: root
      password: root
情况激活
spring:
  profiles:
    active: dev(填的是文件名中的key)
留意;
如果设置了spring.profiles.active,而且和application有重叠属性,以active设置优先。
如果设置了spring.profiles.active,和application无重叠属性,application设置依然收效!

springmvc整合与设置

web干系设置
1.`server.port`: 指定应用步调的HTTP服务器端标语。
2. `server.servlet.context-path`: 设置应用步调的上下文路径。这是应用步调在URL中的根本路径。默认情况下,上下文路径为空。
3. `spring.mvc.view.prefix`和`spring.mvc.view.suffix`: 这两个属性用于设置视图剖析器的前缀和后缀
4. `spring.resources.static-locations`: 设置静态资源的位置。默认情况下,Spring Boot会将静态资源放在classpath:/static目次下(故而一样寻常不消设置)
5. `spring.http.encoding.charset`和`spring.http.encoding.enabled`: 这两个属性用于设置HTTP哀求和相应的字符编码。
比方:
   #springmvc干系的设置
#一样寻常在server下设置
server:
  port: 80  #设置端标语,默认是8080
  servlet:
    context-path: /boot #设置项目根路径

spring:
  mvc:
    view: #视图剖析器设置
      prefix: /WEB-INF/views/  #前缀名
      suffix: .jsp  #后缀名
  web:
    resources:
      static-locations: classpath:/webapp  #设置静态资源文件夹
      #一旦设置了,那么默认的静态资源文件夹就无法访问了
      #外部访问金泰资源的时间无需写静态资源文件夹(直接写文件名即可,要带上后缀)
静态资源处置惩罚:
在springboot中就界说了静态资源的默认查找路径
默认的静态资源路径为:
* *· classpath:/META-INF/resources/**
**· classpath:/resources/**
**· classpath:/static/**
**· classpath:/public/**
我们只要静态资源放在这些目次中任何一个,SpringMVC都会帮我们处置惩罚。 我们风俗会把静态资源放在classpath:/static/ 目次下。在resources目次下创建index.html文件
在springboot下springmvc中的东西照旧正常利用
springmvc的整合照旧创建一个设置类实现WebMvcConfigurer
拦截器,全局非常类像之前一样创建;
druid池与兼容性处置惩罚

所须要导入的依靠:

            <!--  web开辟的场景启动器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 数据库干系设置启动器 jdbctemplate 事件干系-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <!-- druid启动器的依靠  -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-3-starter</artifactId>
                <version>1.2.18</version>
            </dependency>
            <!-- 驱动类-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.28</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.28</version>
            </dependency>
所设置的信息:application.yaml文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource  #利用druid毗连池
#    username: 账号
#    password: 暗码  #如果是springboot2整合druid毗连池,可利用此信息设置账号和暗码,springboot3不可
      # Druid的其他属性设置 springboot3整合情况下,数据库毗连信息必须在Druid属性下!
    druid:
        url: jdbc:mysql://localhost:3306/day01
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
        # 初始化时创建物理毗连的个数
        initial-size: 5
        # 毗连池的最小空闲数量
        min-idle: 5
        # 毗连池最大毗连数量
        max-active: 20
        # 获取毗连时最大期待时间,单元毫秒
        max-wait: 60000
        # 申请毗连的时间检测,如果空闲时间大于timeBetweenEvictionRunsMillis,实行validationQuery检测毗连是否有用。
        test-while-idle: true
        # 既作为检测的隔断时间又作为testWhileIdel实行的依据
        time-between-eviction-runs-millis: 60000
        # 烧毁线程时检测当前毗连的末了活动时间和当前时间差大于该值时,关闭当前毗连(设置毗连在池中的最小生存时间)
        min-evictable-idle-time-millis: 30000
        # 用来检测数据库毗连是否有用的sql 必须是一个查询语句(oracle中为 select 1 from dual)
        validation-query: select 1
        # 申请毗连时会实行validationQuery检测毗连是否有用,开启会低沉性能,默以为true
        test-on-borrow: false
        # 归还毗连时会实行validationQuery检测毗连是否有用,开启会低沉性能,默以为true
        test-on-return: false
        # 是否缓存preparedStatement, 也就是PSCache,PSCache对支持游标的数据库性能提升巨大,比如说oracle,在mysql下发起关闭。
        pool-prepared-statements: false
        # 要启用PSCache,必须设置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的标题,可以把这个数值设置大一些,比如说100
        max-pool-prepared-statement-per-connection-size: -1
        # 归并多个DruidDataSource的监控数据
        use-global-data-source-stat: true
测试代码
需求:查询t_emp表中的全部数据
   实体类:Employee略
controller类:
@Controller
@ResponseBody
@RequestMapping("emp")
public class EmployeeController {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @GetMapping("list")
    public List<Employee> list(){
        //数据库
        String sql="select * from t_emp";
        List<Employee> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Employee.class));
        return query;
    }
}
出现标题:
通过源码分析,druid-spring-boot-3-starter现在最新版本是1.2.18,固然适配了SpringBoot3,但缺少自动装配的设置文件,
办理:
须要手动在resources目次下创建META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports,文件内容如下!
                    com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceAutoConfigure
mybatis整合与设置

mybatis整合步调:
1. 导入依靠:在您的Spring Boot项目标构建文件(如pom.xml)中添加MyBatis和数据库驱动的干系依靠。比方,如果利用MySQL数据库,您须要添加MyBatis和MySQL驱动的依靠。
2. 设置数据源:在`application.properties`或`application.yml`中设置数据库毗连信息,包罗数据库URL、用户名、暗码、mybatis的功能设置等。
3. 创建实体类:创建与数据库表对应的实体类。
4. 创建Mapper接口:创建与数据库表交互的Mapper接口。
5. 创建Mapper接口SQL实现: 可以利用mapperxml文件大概注解方式
6. 创建步调启动类
7. 注解扫描:在Spring Boot的主应用类上添加`@MapperScan`注解,用于扫描和注册Mapper接口。
8. 利用Mapper接口:在须要利用数据库利用的地方,通过依靠注入或直接实例化Mapper接口,并调用此中的方法举行数据库利用。
为什么此时的mapper接口与mapper.xml文件的包布局可以不一样:
之前是批量扫描,按照包去找对应的mapper接口与mapper.xml文件
在springboot场景下会分开配,会在设置文件中指定mapper.xml文件的设置;而接口的位置,会在启动类上用注解扫描。
代码举例:
Application.xml文件
   server:
  address: 0.0.0.0  # 答应全部IP访问
# druid毗连池
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://localhost:3306/mybatis-example
      username: root
      password: abc123LQ
      driver-class-name: com.mysql.cj.jdbc.Driver
#mybatis-彻底扬弃了mybatis-config.xml文件
#mapperxml文件的设置    setting的设置     别名的设置
mybatis:
  mapper-locations: classpath:/mappers/*.xml  #指定mapper.xml文件的位置
  type-aliases-package: com.atguigu.pojo  #给类起别名的设置
  configuration:
    map-underscore-to-camel-case: true  #开启驼峰式
    auto-mapping-behavior: full   #自动字段映射
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl  #日志输出
实体类Employee:略
Mapper.xml文件(EmployeeMapper.xml):lue
Controller(EmployeeController类):略
启动类:
   @SpringBootApplication
@MapperScan("com.atguigu.mapper") //指定mapper接口所在的位置,会自动将全部mapper接口的署理对象放到ioc容器
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class,args);
        System.out.println("hello world!");
    }
}
aop与tx整合

tx整合:

原来:
     * 给方法添加事件的利用
     *        0 导入JDBC的依靠
     *        1 选定我们须要的事件管理器的实现类,在设置类中创建该类的对象,利用注解的方法将该类添加到ioc
     *                         留意:该组件须要引入毗连池的组件
     *        2 在设置类上加上 @EnableTransactionManagement 表现开启事件注解
     *        3 在我们想要添加事件的方法上加上 @Transactional那么该方法就有事件了
 
现在(利用spring-boot后):
由于添加了jbdc的依靠;而SpringBoot项目会自动设置一个 DataSourceTransactionManager,
以是我们只需在方法(大概类)加上 @Transactional 注解,就自动纳入 Spring 的事件管理了,
也不须要在设置类加@EnableTransactionManagement//开启事件注解的支持

     * 给方法添加事件的利用
     *        0 导入JDBC的依靠   
     *        1 选定我们须要的事件管理器的实现类,在设置类中创建该类的对象,利用注解的方法将该类添加到ioc(可以省略)
     *                         留意:该组件须要引入毗连池的组件
     *        2 在设置类上加上 @EnableTransactionManagement 表现开启事件注解(可以省略)
     *        3 在我们想要添加事件的方法上加上 @Transactional那么该方法就有事件了

实今世码:
service层:
   @Service
public class EmployeeService {
    @Autowired
    private EmployeeMapper employeeMapper;
    @Transactional
    public void delete( ){
        int rows=employeeMapper.delete(1);
        System.out.println("rows = " + rows);
        int i=1/0;
    }
}
controller层:
   @Controller
@ResponseBody
@RequestMapping("/emp")
public class EmployeeController {
    @Autowired
    private EmployeeMapper employeeMapper;
    @Autowired
    private EmployeeService employeeService;
    @GetMapping
    public List<Employee> query(){
        employeeService.delete();
        return null;
    }
}

aop整合:

原来:
界说一个加强类(该类要参加ioc),在该类中界说一些方法(关照用@Before/@After…修饰),在用切点表达式指明改关照要作用在那些方法上(execution(…))
现在:
只须要导入依靠;然后直接利用aop注解即可。
不消在设置类添加@EnableAspectJAutoProxy//开启aspectj注解
代码举例:
   @Component
@Aspect
public class LogAdvice {
    @Before("execution(* com..service.*.*(..))")
    public void before(JoinPoint point){
        String simpleName = point.getTarget().getClass().getSimpleName();
        String name = point.getSignature().getName();
        System.out.println("name = " + name);
        System.out.println("simpleName = " + simpleName);
    }
}
直接测试:乐成
Springboot3项目打包和运行

添加打包插件:
> 在Spring Boot项目中添加`spring-boot-maven-plugin`插件是为了支持将项目打包成可实行的可运行jar包。如果不添加`spring-boot-maven-plugin`插件设置,利用通例的`java -jar`下令来运行打包后的Spring Boot项目是无法找到应用步调的入口点,因此导致无法运行。
<!--    SpringBoot应用打包插件-->
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
实行打包:
Clean-package
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: SpringBoot3条记