Spring Boot 比较重要的四个核心内容:
自动配置:针对常见应用,自动处理相关配置
起步依赖:告诉 Spring Boot 需要什么功能,它就能自动引入,并处理好版本
命令行界面:作为 IDE 党,我感觉有点儿鸡肋,依然认为没有 IDE 的话 Java 开发没法玩
Actuator: 深入运行中的 Spring 应用,一探究竟
从根本上来说, Spring Boot的项目只是普通的Spring项目,只是它们正好用到了Spring Boot的起步依赖和自动配置而已。
Spring Boot没有引入任何形式的代码生成,而是利用了Spring 4的条件化配置特性,以及Maven和Gradle提供的传递依赖解析,以此实现Spring应用程序上下文里的自动配置。
简而言之,从本质上来说,Spring Boot就是Spring,它做了那些没有它你自己也会去做的Spring Bean配置。
在 org.springframework.boot.autoconfigure
下你能找到各种自动化配置的类,简单讲就是通过条件配置,如果 classpath 下包含 JdbcTemplate,就自动创建对应的 bean,如果包含数据库驱动就自动创建 DataSource
,因为你引用他们就是为了这么做的,Spring Boot 进一步消除了模板代码。
@Configuration
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class JdbcTemplateAutoConfiguration {
private final DataSource dataSource;
public JdbcTemplateAutoConfiguration(DataSource dataSource) {
this.dataSource = dataSource;
}
@Bean
@Primary
@ConditionalOnMissingBean(JdbcOperations.class)
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(this.dataSource);
}
@Bean
@Primary
@ConditionalOnMissingBean(NamedParameterJdbcOperations.class)
public NamedParameterJdbcTemplate namedParameterJdbcTemplate() {
return new NamedParameterJdbcTemplate(this.dataSource);
}
}
简单的使用 Spring Initializr 生成初始化项目即可运行。但我这里连接不上,费了番功夫自己编译了一个,见底部链接。
入口类使用了 @SpringBootApplication
注解,了解 Spring 注解的话就比较容易理解,简化了必备的注解
@SpringBootApplication
public class Application {}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {}
加入 security 后直接开跑,用户名 user, 密码在控制台
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Using default security password: 8f9c396c-a311-4da0-84d5-860058867703
Spring Boot能从多种属性源获得属性,包括如下几处。
(1) 命令行参数
(2) java:comp/env里的JNDI属性
(3) JVM系统属性
(4) 操作系统环境变量50 第 3 章 自定义配置
(5) 随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})
(6) 应用程序以外的application.properties或者appliaction.yml文件
(7) 打包在应用程序内的application.properties或者appliaction.yml文件
(8) 通过@PropertySource标注的属性源
(9) 默认属性
这个列表按照优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性。例如,命令行参数会覆盖其他属性源里的属性。
application.properties和application.yml文件能放在以下四个位置。
(1) 外置,在相对于应用程序运行目录的/config子目录里。
(2) 外置,在应用程序运行的目录里。
(3) 内置,在config包内。
(4) 内置,在Classpath根目录。
@EnableConfigurationProperties 从配置中注入属性,无需添加,自动开启
@Component
@ConfigurationProperties("site")
public class SiteConfig {
private String name;
private String desc;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
配置中通过 spring.profiles.active 激活对应 profile
遵循application-{profile}.properties这种命名格式,这样就能提供特定于Profile的属性了。
公共或者默认配置依然可以放在 application.properties 配置中。
Spring Boot会为错误视图提供如下错误属性。
timestamp:错误发生的时间。
status: HTTP状态码。
error:错误原因。
exception:异常的类名。
message:异常消息(如果这个错误是由异常引起的)。
errors: BindingResult异常里的各种错误(如果这个错误是由异常引起的)。
trace:异常跟踪信息(如果这个错误是由异常引起的)。
path:错误发生时请求的URL路径。
覆盖自动配置其实很简单,就是显式地编写那些没有Spring Boot时你要做的Spring配置。Spring Boot的自动配置被设计为优先使用应用程序提供的配置,然后才轮到自己的自动配置。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。