1 Star 0 Fork 0

kassadin / SpringBootInAction

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Spring Boot In Action

Spring Boot 比较重要的四个核心内容:

  1. 自动配置:针对常见应用,自动处理相关配置

  2. 起步依赖:告诉 Spring Boot 需要什么功能,它就能自动引入,并处理好版本

  3. 命令行界面:作为 IDE 党,我感觉有点儿鸡肋,依然认为没有 IDE 的话 Java 开发没法玩

  4. 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);
	}
}

2. 第一个应用

简单的使用 Spring Initializr 生成初始化项目即可运行。但我这里连接不上,费了番功夫自己编译了一个,见底部链接。

入口类使用了 @SpringBootApplication 注解,了解 Spring 注解的话就比较容易理解,简化了必备的注解

  1. Spring的@Configuration:Java 配置类,替代 XML 配置
  2. Spring的@ComponentScan:启用组件扫描,自动注册 Bean
  3. Spring Boot 的 @EnableAutoConfiguration : 开启了 Spring Boot 自动配置
@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 {}

3. 自定义配置

加入 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根目录。

在一个 Bean 里搜集属性

@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;
    }
}

Profile

配置中通过 spring.profiles.active 激活对应 profile

使用特定于Profile的属性文件

遵循application-{profile}.properties这种命名格式,这样就能提供特定于Profile的属性了。

公共或者默认配置依然可以放在 application.properties 配置中。

yaml 配置则可以放在同一个文件中,通过 --- 分割即可

定制错误页面

Spring Boot会为错误视图提供如下错误属性。

 timestamp:错误发生的时间。
 status: HTTP状态码。
 error:错误原因。
 exception:异常的类名。
 message:异常消息(如果这个错误是由异常引起的)。
 errors: BindingResult异常里的各种错误(如果这个错误是由异常引起的)。
 trace:异常跟踪信息(如果这个错误是由异常引起的)。
 path:错误发生时请求的URL路径。

覆盖自动配置其实很简单,就是显式地编写那些没有Spring Boot时你要做的Spring配置。Spring Boot的自动配置被设计为优先使用应用程序提供的配置,然后才轮到自己的自动配置。

Else

Spring Initializr 连接不上

Spring Boot Gradle 多 module 配置

https://spring.io/guides/gs/multi-module/

https://github.com/leon/springboot-multiproject

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/kassadin/springbootinaction.git
git@gitee.com:kassadin/springbootinaction.git
kassadin
springbootinaction
SpringBootInAction
master

搜索帮助