Spring Boot 的学习

简介

Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者,几乎成为了每个公司都缺一不可的使用的技术,所以学好Spring Boot对于Java程序员是必不可少的。本文章对Spring Boot进行详解,通过案例实现Spring Boot一些功能,作为复习Spring Boot的一手资料。

1.1 Spring Boot 快速入门

 1. 新建maven项目,在pom文件中加入以下依赖:

<!--这是表示继承关系,此启动类必不可少必不可少-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.0</version>
</parent>
<!--这是表示web服务器,默认为 Tomcat-->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

2. java包下新建com.huayu包,并在huayu包下新建类Application,此类很重要,作为spring boot的引导类 ,且位置需要被识别到,要把位置提高,可以放在java包下或者main包下都可以。个人放到com下的huayu包下。

@SpringBootApplication   //标识 spring boot 的引导类
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

3. 无论如何,我们都要编写控制层,因为没人知道你要写些什么。在huayu下新建controller包,随便写一个类,就叫他controller吧,

@RestController  //标识为 Rest 风格的控制层 Controller
@RequestMapping("/test")  //访问路径
public class controller {

    @GetMapping("/{id}")  //标识Get请求,且要加一个 id
    public String test(@PathVariable Integer id){
        System.out.println(id);  //标识上方 id 指代的位置
        return "欢迎来到springboot";
    }

}

4. 运行Application类,利用PostMan向服务器发送get请求,没有设定yml文件的话,默认访问端口号为8080,通过 http://localhost:8080/test/1 可以得到返回来的值:“欢迎来到springboot”。且控制台也会输出1。

1.2 Spring Boot 配置文件

    对于配置文件,我们并不陌生。对于spring boot,我们就使用最为常用的yml文件格式来配置spring boot。

1.2.1 配置文件中资源定义

在 resources资源目录下新建 application.yml 。
注意:application.properties 也是一种配置,此格式优先级最高。

1. 服务器端口号的修改
注意冒号后要填一个空格。

server:
  port: 8081

2. 定义一对数据
使用冒号隔开就好,注意冒号后要填一个空格。

lesson1: Springboot1
lesson2: Springboot2

3. 定义列表,可以在列表再定义列表,注意冒号后要填一个空格。

enterprise:
  name: huayu
  age: 16
  list:
    - java
    - python
    - c++

4. 定义运行环境,使用3个 - 隔开,开发环境和生产环境、测试环境这两个一样的,不同的写法而已。通过active指定当前启用的环境

spring:
  profiles:
    active: dev  #设置现在启用的环境
---
spring:
  config:
    activate:
      on-profile: dev   #给开发环境起的名字
server:
  port: 81

---
spring:
  profiles: pro  #给生产环境起的名字
server:
  port: 82
---
spring:
    profiles: test  #给测试环境起的名字
server:
    port: 83
---

1.2.2 配置文件中资源获取

    我们如何获取在资源呢?
使用Value实现注入,使用自动装配Environment和自己定义的类
我们再演示之前新建pojo类和包

对于pojo类,需要加上两个注解:
1. @Component - 将实体类 bean 的创建交给 Spring 管理。
2. @ConfigurationProperties表示加载配置文件
其中使用了 prefix 属性指定只加载指定前缀的数据
 

@Component
@ConfigurationProperties(prefix = "enterprise")
public class pojo {
    private String name;
    private Integer age;

//省略get set
}
@RestController //标识为 Rest 风格的控制层 Controller
@RequestMapping("/test") //访问路径
public class controller {
    //如何实现读取数据呢
    //1. 可以使用注入:
    @Value("${lesson1}")
    private String lesson1;
    @Value("${lesson2}")
    private String lesson2;
    @Value("${enterprise.name}")
    private String name;
    //2. 自动装配
    //spring boot提供了这种方式:会将配置文件中所有的数据封装到Environment对象中
    //用哪个数据只需要通过调用getProperty(String name)方法获取。
    @Autowired
    private Environment environment;
    //3. 自己定义
    @Autowired
    private pojo pojo;

    @GetMapping("/{id}") //标识Get请求,且要加一个 id
    public String test(@PathVariable Integer id){ //标识上方 id 指代的位置
        System.out.println(lesson1);
        System.out.println(lesson2);
        System.out.println("===>>>"+name+"<<<===");
        System.out.println("===>>>"+environment.getProperty("enterprise.list[0]")+"<<<===");
        System.out.println("===>>>"+pojo.getName()+"<<<===");
        System.out.println(id);
        return "欢迎来到springboot";
    }

}

使用PostMan发送查看输出结果:

控制台:
Springboot1
Springboot2
===>>>huayu<<<===
===>>>java<<<===
===>>>huayu<<<===
1

注意:若有在pojo类上有红色提示就加入下面依赖:

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

1.2.3 使用命令行启动参数设置

设置为测试环境启动

java –jar xxx.jar –-spring.profiles.active=test

那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式

java –jar xxx.jar –-server.port=88

当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下

java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test

注意:如果使用了多种方式配合同一个配置项,优先级高的生效。

1.3 端口号书写位置优先级问题

以下级别越高,那么优先级越高。

用处:开发完毕后,测试人员需要修改其他的东西,就需要再写一些yml配置文件。那么就涉及到了优先级问题了,因为我们也设计了yml文件

注意:SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,需要在 jar 所在位置的 config 目录下创建一个任意名称的文件夹

  • 1级:classpath:application.yml
    表示:直接写在resource下的yml属于1级优先级

  • 2级:classpath:config/application.yml
    表示:写在resource.config包下的yml属于2级优先级

  • 3级:file :application.yml
    表示:我们将文件打上包后,写在此包位置下的yml文件属于3级优先级

  • 4级:file :config/application.yml
    表示:我们将文件打上包后,写在此包位置下的config下的yml文件属于4级优先级

2.1 Spring Boot 整合Junit

 2.1.1  回顾Spring 整合 Junit

加上@RunWith 表示指定运行器
加上@ContextConfiguration 表示指定配置类或配置文件

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTest {
    
    @Autowired
    private BookService bookService;
    
    @Test
    public void testSave(){
        bookService.save();
    }
}

 2.1.2  完成Spring Boot 整合 Junit

其实很更加简单,只需要再test.java下创建同路径的(规范),比如在此下新建com.huayu,只需要在此目录下新建AppcationTest类,加上注解@SpringBootTest即可完成。

@SpringBootTest
public class ApplicationTest {

    @Autowired
    private BookService bookService;

    @Test
    void save(){
        bookService.save();
    }

}

3.1 Spring Boot 整合 Mybatis

 3.1.1  回顾 Spring 整合 Mybatis

1. 首先需要在Spring配置类SpringConfig中:
1.1 通过注解@Import 导入 JdbcConfig 配置类、导入 MybatisConfig 配置类
1.2 通过注解@PropertySource 导入资源文件
1.3 通过注解@ComponentScan 指定包别名
1.4 通过注解@Configuration 表明此类为配置类

@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}

2. 在编辑 JdbcConfig 配置类、导入 MybatisConfig 配置类中:

JdbcConfig中通过SpringConfig中的@PropertySource定义数据源-通过@Value("${xxx.xxx}");设置好了再设置DataSource中各个值。

public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource getDataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

MybatisConfig中需要定义 SqlSessionFactoryBean和定义映射配置,属于mybatis的配置文件。

@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
    MapperScannerConfigurer msc = new MapperScannerConfigurer();
    msc.setBasePackage("com.huayu.dao");
    return msc;
}

@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
    SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
    ssfb.setTypeAliasesPackage("com.huayu.pojo");
    ssfb.setDataSource(dataSource);
    return ssfb;
}

 3.1.2 Spring Boot 整合 Mybatis

1. 需要加入Mybatis的依赖、MySQL的依赖、还有一些启动项的依赖和其他的。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.0</version>
</parent>

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.0</version>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

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

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

2. 定义实体类Book、dao层接口BookDao、引导类Application、yml配置文件Application.yml、静态页面存放处static和测试类ApplicationTest

这里有几个说一下:

1. 对于BookDao需要加上@Mapper注解让Mybatis识别为Dao层。
2. 对于Application.yml我们需要这样设置:

spring:
  datasource: #设置datasource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///db1
    username: root
    password: 1234
    #这一行是指定数据源,我们用的是druid的DruidDataSource
    type: com.alibaba.druid.pool.DruidDataSource 

3. 只需要运行引导类就好了。

4. 总结

        总结下从spring转换为spring boot的快速办法:我们有新加入的和删除的两部分

新加入的:1)yml 配置文件 2)spring boot 的一些注解 3)依赖的区别 4)引导类、static静态包
删除的:    1)spring配置文件 2)自然包括了jdbc和mybatis配置文件 3)资源文件也被yml代替

总结:太方便了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值