Spring Boot是快速搭建Spring工程的脚手架,简化配置与依赖关系(约定大于配置),让咱们把精力集中在业务部分java
建立一个Hello World的Web工程mysql
直接Next -> 填写工程坐标 -> 建立web
父工程管理jar包,没有业务代码,子工程须要jar包时不用写版本号spring
<!-- 父工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> </parent> <!-- 设置JDK版本 --> <properties> <java.version>1.8</java.version> </properties> <!-- 添加依赖 --> <dependencies> <!-- 场景启动器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
注意Application要放在根目录下,由于会去Application的同级目录去扫描,注意左边有层级结构sql
@SpringBootApplication public class Application { public static void main(String[] args) { //SpringBoot启动 SpringApplication.run(Application.class,args); } }
@RestController public class HelloController { //请求映射 @RequestMapping(value = "hello",method = RequestMethod.GET) public String hello(){ return "Hello Worlddddd"; } }
启动SpringBoot应用浏览器
打开浏览器测试成功app
总结maven
咱们来看看@SpringBootApplication这个组合注释,底层还包括两个注解spring-boot
@SpringBootConfiguration:SpringBoot的配置类,标注在类上表示该类是个配置类测试
它底层又有@Configuration:Spring的注解,放在配置类上
@EnableAutoConfiguration:开启自动配置,之前须要配置的东西,SpringBoot帮咱们自动配置
它底层有@AutoConfigurationPackage:自动配置包
@Import(.AutoConfigurationImportSelector.class):导入组件的选择器,会给容器导入很是多的自动配置类(xxxAutoConfiguration),并配置好对应的组件
有了自动配置类就免去了手动编写配置注入组件了,其实现由SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,classLoader)完成
总结:SpringBoot启动时从类路径下META_INF/spring.factories获取EnableAutoConfiguration指定的值,将这些值做为自动配置类导入到容器中,自动配置类就生效,帮咱们进行自动配置工做
名字是固定以application开头的
用来修改SpringBoot默认配置
jdbc: driverclassName: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC username: root password: howl
<!-- 注解解析器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
/* * @ConfigurationProperties把配置文件的属性注入该类中 */ @Component @ConfigurationProperties(prefix = "jdbc") public class JDBC { private String driverclassName; private String url; private String username; private String password; //各类Getters和Setters }
经常使用注解
//将配置文件的属性注入到该对象中,只有这个注解是生效的,须要配合@EnableConfigurationProperties注解,或加入@Component注解 @ConfigurationProperties(prefix = "jdbc") //属性注入 @value //使对应的配置文件生效加入到Bean容器 @EnableConfigurationProperties(JDBCProperties.class) //声明一个类为配置类,代替xml文件,通常配合@Bean注解 @Configuration //声明在方法上,将返回值加入Bean容器,代替<bean>标签 @Bean //------------推荐使用上面来指定配置文件,在主目录下创一个config包------------- //指定外部属性文件,这时还没生效,须要配合下面的注解 @PropertySource(value = {"classpath:other.properties"}) //加载多个配置文件,放在主程序类上 @ImportResourcec(locations = {"classpath:other.yml"})
@ConfigurationProperties和@value区别
@ConfigurationProperties | @value | |
---|---|---|
功能 | 批量注入配置 | 单个指定 |
松散绑定 | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂数据类型 | 支持 | 不支持 |
在不一样环境下须要使用不一样的配置文件,这里就能够用Profile
默认是application.yml /properties里的配置
咱们在resources下创建两个配置文件
两者用上面的JDBC配置文件,不一样于username,一个为root,一个为Howl
激活测试
# 在application.yml主配置文件中添加下面配置 spring: profiles: active: dev
Controller代码
//请求映射 @RequestMapping(value = "hello",method = RequestMethod.GET) public String hello(){ return jdbc.getUsername(); }
未激活dev前,username为root
激活dev后为,username为Howl