spring-boot初探

本文是学习spring-boot的时候的学习笔记,供以后查阅和学习者参考讨论。

spring-boot是集成了spring众多框架,采取约定即配置的设计理念,大大简化了在使用spring的时候的开发工作,开发者只需要极少的配置,即可启动运行一个应用程序,极大地提升了开发效率。

包扫描

首先是包扫描的问题,spring-boot默认会扫描启动类下的所有的包里的类。
在spring-boot启动的时候,会去判断是否存在scanBasePackages 的参数,如果存在,去扫描这个参数中配置的包下的所有的bean,如果没有,会去扫描启动类下的包和子包里的所有的bean。
查看源码,是在ComponentScanAnnotationParser的parse方法中进行了加载

		ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(this.registry,
				componentScan.getBoolean("useDefaultFilters"), this.environment, this.resourceLoader);

		...
		Set<String> basePackages = new LinkedHashSet<>();
		String[] basePackagesArray = componentScan.getStringArray("basePackages");
		for (String pkg : basePackagesArray) {
			String[] tokenized = StringUtils.tokenizeToStringArray(this.environment.resolvePlaceholders(pkg),
					ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
			Collections.addAll(basePackages, tokenized);
		}
		for (Class<?> clazz : componentScan.getClassArray("basePackageClasses")) {
			basePackages.add(ClassUtils.getPackageName(clazz));
		}
		if (basePackages.isEmpty()) {
			basePackages.add(ClassUtils.getPackageName(declaringClass));
		}
		scanner.addExcludeFilter(new AbstractTypeHierarchyTraversingFilter(false, false) {
			@Override
			protected boolean matchClassName(String className) {
				return declaringClass.equals(className);
			}
		});
		return scanner.doScan(StringUtils.toStringArray(basePackages));

可以看到在ClassPathBeanDefinitionScanner里面进行了bean的注册。

环境信息配置加载

配置信息默认可以在src/main/resources/下的application.properties 或者 application.yml 中覆盖,默认信息由优先级别可以控制。
1.启动时加入
2.来自java:comp/env的JNDI属性
3.Java系统属性(System.getProperties())
4.操作系统环境变量
5.RandomValuePropertySource配置的random.*属性值
6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
10.@Configuration注解类上的@PropertySource
11.通过SpringApplication.setDefaultProperties指定的默认属性

配置文件优先级:
1.当前项目盘符/config下面。
2.当前项目运行目录下面。
3.classpath:/config
4.classpath:/

spring-boot-xxx-starter 作用和配置

spring-boot-xxx-starter将使用xxx功能的时候的所有需要的依赖和配置都集成到此依赖中,方便引用之后加入少量的配置或者不加配置直接使用,方便了对于配置依赖的管理。
关键在于依赖引入和自动装配功能,自动装配是在starter中的META-INF下建立了spring.factories文件,这个文件中标明了配置类,在启动的时候就可以加载进去了。
在这里插入图片描述

spring-boot 健康检查之actuator

需要引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

通过访问http://{ip}:{port}/actuator/{endpoint} 就可以查看相关信息了。
各个端点的功能可以参考springboot的官方介绍。
链接: Spring Boot Actuator: Production-ready features.
当然,也可以根据自己的需求去自定义端点,开放关闭特定的端点。
启动指定的端点:

management.endpoint.info.enabled=true

info可以替换为需要的端点名称。
自定义端点:
需要使用@Endpoint注解,例子如下:

@Endpoint(id = "sxhEndPoint")
@Component
public class SxhEndPoint{

	List peopleCount = new ArrayList();
	
    @ReadOperation
    public String showCount() {
        // spring http端点的json格式
        return "{\"peopleCount \":\""+peopleCount.size()+"\"}";
    }
}

自定义的健康检查需要继承AbstractHealthIndicator类,重写doHealthCheck方法。
metrics是对于一些指标进行持续监控的功能,通过MeterRegistry把想要添加的指标添加进去。例子:

    public MyMetrics(MeterRegistry meterRegistry) {
        meterRegistry.gaugeCollectionSize("dictionary.size", Tags.empty(), this.words);
    }

Spring-boot cli 快速搭建和开发

对于groovy类型的文件,可以快速开发
快速运行:

spring run XXX.groovy -- --server.port=9000

打包程序(包含include和exclude可选参数):

spring jar my-app.jar XXX.groovy

spring init 可以添加依赖,快速构建spring项目
spring init --list 可以查看所有依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值