2.1 约定优于配置
Build Anything with Spring Boot Spring Boot is the starting point forbuilding all Spring-based applications. Spring Boot is designed to get you upand running as quickly as possible, with minimal upfront configuration of Spring.<br /> 上面是引自官网的一句话,大概是说,springBoot是所有基于Spring开发的项目的起点。springboot的设计就是为了让你尽可能快的跑起来spring应用程序并且尽可能的减少配置。<br />约定优于配置简单来讲,就是spring的一些配置如果不配置就基于约定来实现,比如User类对应的表名约定为user,如果需要用其它名字再需要配置。
2.2 SpringBoot概念
- spring的优缺点
spring的优先有很多,比如为企业级java开发提供了一种相对简单的方法。但是spring的组件代码虽然是轻量级的,但是配置确实重量级的,一开始是使用xml进行配置,spring2.5引入了基于注解的组件扫描,消除了大量的xml配置,spring3.0引入了基于java的配置,这是一种类型安全的可重构配置方式,可以代替xml。
所有这些配置都代表了开发时的损耗,编写配置时间占用了编写应用程序的时间。除此之外,项目的依赖管理也是一件费时的事,环境搭建是需要分析需要哪些坐标,版本是否匹配,一旦选错版本,随之而来的不兼容会严重阻碍项目进度。
- springboot解决上述spring问题
springboot基于约定优于配置思想对上述spring的缺点进行了改善和优化。可以让开发人员不必在配置和逻辑业务之间进行思维的切换,大大提高了开发效率。springboot的两大核心:
- 起步依赖
本质上是一个maven项目模型定义了对其它库的传递依赖,这些东西加在一起支持某种功能。简单来说,就是把某种功能需要的坐标全部打包到一起。
- 自动配置
springboot的自动配置,是指springboot会自动将一些配置类的bean注册进ioc容器,我们可以在需要的地方使用@Autowired或者@Resource注入。
自动主要是指我们只需要引入我们所需功能的包,不需要再额外配置,springboot会自动注入这些bean,我们直接使用即可。
总结:springboot就是基于约定优于配置思想,简化我们使用spring开发的流程,提高开发效率。起步依赖解决了依赖管理复杂的问题,自动配置解决了配置繁琐的问题。
2.3 单元测试和热部署
2.3.1 单元测试
开发过程中,每编写一个功能或者业务方法后,通常都会借助单元测试验证是否正确。springboot对单元测试提供了很好的支持。
引入依赖(如果用Initializr进行初始化,则默认会有这个依赖)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
代码演示
@RunWith(SpringRunner.class) // 测试启动器,并加载springboot测试注解
@SpringBootTest // 标记Spring Boot测试类,并加载ApplicationContext上下文环境
class SpringbootDemoApplicationTests {
@Autowired
private DemoController demoController;
@Test
void contextLoads() {
String demo = demoController.demo();
System.out.println(demo);
}
}
2.3.2 热部署
热部署就是为了修改代码无需重启服务也可以生效
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
- idea进行设置
3. 使用组合键“Ctrl+Shift+Alt+/”打开Maintenance选项框,选中并打开Registry页面,列表找到“compiler.automake.allow.when.app.running”将value值打勾,用于指定idea工具在运行中自动编译。2.4 全局配置文件
全局配置文件可以对一些默认配置进行修改。使用Spring Initializr方式构建springboot项目时,会在resources下面生成一个空的application.properties,springboot加载时会自动加载该文件。我们可以在该文件中编写springboot项目相关属性。系统属性、环境变量、命令参数等等。
演示将application.properties配置文件中的自定义配置属性注入到实体类中。
创建类
@Component
@ConfigurationProperties(prefix = "person")
// @ConfigurationProperties(prefix = "person")将配置文件以person开头的的属性通过setXXX()方法注入到该类对应属性
// @Component 将类放进ioc容器,才能被@ConfigurationProperties赋值
public class Person {
private int id; //id
private String name; //ݷᑍ
private List hobby; //ᆽঅ
private String[] family; //ਹꁿ౮ާ
private Map map;
private Pet pet; //ਬᇔ
// 省略getXX()和setXX()方法
// 省略tostring()方法
}
编写application.properties文件
person.id=1
person.name=王五
person.family=father,mother
person.map.k1=v1
person.map.k2=v2
person.pet.type=111
- 编写application.properties时因为Person类是我们自己定义的所以没有书写提示,想要提示可以:
加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
<dependency/>
-
2.5 配置文件属性值的注入
- 使用@ConfifigurationProperties注入属性,详情看2.4
- 使用@Value注解注入,无需生成该属性的set方法也可以注入
@Component
public class Person {
@Value("${person.id}")
private int id;
}
2.6 自定义配置文件
2.6.1 使用@PropertySource加载配置文件
test.id=110
test.name=test
@Configuration // 自定义配置类
@PropertySource("classpath:test.properties") // 指定自定义配置文件的位置和名称
@EnableConfigurationProperties(MyProperties.class) // 开启自定义配置类的属性注入功能
@ConfigurationProperties(prefix = "test") // 指定注入前缀
public class MyProperties {
private int id;
private String name;
// 省略getter和setter方法
// 省略tostring方法
}
2.6.2 使用@Confifiguration编写自定义配置类
@Configuration
public class MyConfig {
@Bean // 将返回值作为组件放入ioc容器中,id默认为该方法名
public MyService myService(){
return new MyService();
}
}
2.7 随机数设置及参数间引用
2.7.1 随机值设置
在springboot配置文件当中,随机值设置使用到了springboot内嵌的RandomValuePropertySource类,对一些隐秘属性或者测试用例属性值进行随机注入
my.secret=${random.value} // 配置随机数
my.number=${random.int} // 配置随机整数
my.bignumber=${random.long} // 配置随机Long型整数
my.uuid=${random.uuid} // 配置随机uuid类型数
my.number.less.than.ten=${random.int(10)} // 配置小于10的随机整数
my.number.in.range=${random.int[1024,65536]} // 配置范围在[1024,65536]之间的随机整数
2.7.2 参数间引用
参数间的引用也就是后一个配置的属性可以引用前面已经配置的属性,好处就是在多个相互关联的配置属性之中,只需要对其中一个属性预先配置,其它地方都可以引用,省去了后续多处修改的麻烦。
格式:
app.name=MyApp
app.description=${app.name} is a Spring Boot application