一、Spring boot概述
Spring Boot是一个便捷搭建 基于spring工程的脚手架。
简化工程的配置,依赖管理;实现了开发人员把时间都集中在业务开发上。
注意:Spring Boot没有Bean配置文件,所有的spring配置都用注解来配置。
二、Spring Boot入门
1、创建Module
创建一个普通的Module,不要选任何骨架
2、pom.xml(父依赖、启动依赖、java版本)
为什么【启动器依赖】的版本不需要设置?因为【父依赖】spring-boot-starter-parent 已经定好了版本。
SpringBoot 官方出的【启动器依赖】,都是以 spring-boot-starter- 开头
<?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>
<groupId>com.lt</groupId>
<artifactId>lt_springboot</artifactId>
<version>1.0-SNAPSHOT</version>
<!--1、Spring Boot的父级依赖,这样当前的项目就是Spring Boot项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<!--只要设置springboot版本,其它spring-boot-starter-下引用版本都不要,SpringBoot帮我们解决-->
</parent>
<dependencies>
<!--2、Web项目(启动器依赖)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!--3、编译的java版本-->
<properties>
<java.version>11</java.version>
</properties>
</project>
3、启动引导类
* SpringBoot 都有一个启动引导类,这是工程的入口类
* 并在引导类中添加 @SpringBootApplication
* 这个注解有什么用?
* 1、组件扫描:扫描com.lt下的所有注解
* 2、自动整合:
* 3、配置:
package com.lt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot 都有一个启动引导类,这是工程的入口类
* 并在引导类中添加 @SpringBootApplication
* 这个注解有什么用?
* 1、组件扫描:扫描com.lt下的所有注解
* 2、自动整合:
* 3、配置
*/
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args); //指定入口类Application
}
}
4、Controller
package com.lt.Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//@RestController 整合了@Controller 和 @ResponseBody
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello ,Spring Boot!";
}
}
注意:SpringBoot中不用扫描Controller组件
5、使用引导类启动
6、访问地址 http://localhost:8080/hello
三、java代码创建spring配置
Java代码创建spring配置:用java类和一些注解,创建spring配置。
比较常用的注解有:
@Configuration:声明一个类作为配置文件,代替xml文件
@Bean: 声明在方法是上,将方法返回值加入Bean容器,代替<bean>标签
@Value: 属性注入
@PropertySource:指定外部.properties属性文件
实例:使用@Value获取配置文件的配置项,并结合@Bean注册组件到Spring
步骤:
1、添加依赖:druid数库连接池
2、创建数库
3、创建数据库参数的配置文件jdbc.properties
4、创建配置类
5、改造处理器注入数据源并使用
1、添加依赖pom.xml
<!--druid数库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>
2、创建库
3、resources文件夹下,创建数据库参数的配置文件jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
4、创建config包,编写配置类 JdbcConfig。
@Configuration :将类指定为spring 配置类
@PropertySource("classpath:jdbc.properties") :将.properties文件加载到spring 容器里
@Bean : 将方法的返回值存储到spring容器里
@Value :注入普通属性值
package com.lt.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@Configuration
@PropertySource("classpath:jdbc.properties") //配置文件地址
public class JdbcConfig {
//@Value 获得配置文件的配置项
@Value("${jdbc.url}")
String url;
@Value("${jdbc.driverClassName}")
String driverClassName;
@Value("${jdbc.username}")
String username;
@Value("${jdbc.password}")
String password;
@Bean //注册数据源
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
}
5、Controller
6、调试
刷新浏览器地址:http://localhost:8080/hello
四、SpringBoot中@ConfigurationProperties 属性注入
使用Spring Boot提供的注解@ConfigurationProperties
将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中
1、使用 @ConfigurationProperties需要引用坐标
spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional> <!--不传递依赖-->
</dependency>
2、在resources文件夹下,将jdbc.properties修改为 application.properties(名字是固定的)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
3、在代码文件夹,创建JdbcPropertis类,在该类名上面添加@ConfigurationProperties
将Spring Boot的配置文件(默认必须为application.properties或application.yml)中的配置项读取到一个对象中。
注意:propertis配置件中key的名称 和 类中字段的名称 相同
package com.lt.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @ConfigurationProperties 从application.properties 配置文件中读取配置项
* prefix 配置项的前缀
*/
@ConfigurationProperties(prefix = "jdbc")
public class JdbcPropertis {
private String driverClassName;
private String url;
private String username;
private String password;
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
4、使用@EnableConfigurationProperties(JdbcPropertis.class),将JdbcPropertis 注入到配置类中
package com.lt.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@Configuration
@EnableConfigurationProperties(JdbcPropertis.class) //配置项类
public class JdbcConfig {
@Bean //注册数据源
public DataSource dataSource(JdbcPropertis jdbcPropertis){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(jdbcPropertis.getDriverClassName());
dataSource.setUrl(jdbcPropertis.getUrl());
dataSource.setUsername(jdbcPropertis.getUsername());
dataSource.setPassword(jdbcPropertis.getPassword());
return dataSource;
}
}
五、SpringBoot 中更优雅的属性注入
如果属性只有一个Bean需要使用,我们无需将其注入到一个类(JdbcProperties,将该类上的所有注解去掉)中。
而直接在需要的方法声明即可
1、使用 @ConfigurationProperties需要引用坐标
spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional> <!--不传递依赖-->
</dependency>
2、在resources文件夹下,创建配置文件 application.properties(名字是固定的)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root
3、编写配置类 JdbcConfig(注册数据源)
package com.lt.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import javax.sql.DataSource;
@Configuration
public class JdbcConfig {
@Bean //注册数据源
@ConfigurationProperties(prefix = "jdbc")
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
return dataSource;
}
}
4、Controller
package com.lt.Controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;
//@RestController 整合了@Controller 和 @ResponseBody
@RestController
public class HelloController {
@Autowired
private DataSource dataSource;
@GetMapping("/hello")
public String hello(){
System.out.println("dataSource="+dataSource);
return "hello ,Spring Boot!";
}
}