我们先来看一下入口类上的**@SpringBootApplication**注解
@SpringBootApplication 是一个组和注解(多个注解组合而成的一个注解),其实本身@SpringBootApplication注解没有什么太大的功能,但是取决于它身上组合而来的注解,其实@SpringBootApplication注解单纯在springboot中就是一个标志,但是它的底层是由多个注解组合而来的,组合之后**@SpringBootApplication**就显得非常重要了,我们看一下@SpringBootApplication注解的源码:
其中,@Target、@Retention是元注解(用来修饰注解的注解),@Target是用来指定注解的生效范围,@Retention用来指定注解什么时候有效。@SpringBootApplication注解等价于@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan注解。
@SpringBootApplication注解本身没有太大用,但是由于它继承了这三个注解,由这三个注解组合而来,所以它的作用就非常大了。
@SpringBootConfiguration: 用来自动配置spring + springmvc(初始化servlet …)相关环境;
@EnableAutoConfiguration:开启自动注解(使spring相关环境配置生效),这个才是自动配置最核心的注解,同时它还能与项目中引入的第三方技术自动配置其环境,也就是说,只需要引入mybatis-springboot整合的依赖,就能帮你自动配置mybatis的环境;如果引入redis-springboot的依赖,我就能帮你自动配置redis环境
@ComponentScan:组件扫描(扫描到注解使注解生效),这也就是为什么建议入口类在所有子包之上了,当然入口类也可以不在所有子包之上了,但需要加上@ComponentScan(com.baizhi),扫描整个包使注解生效。
接下来我们来看看入口类中的静态方法run方法:
SpringApplication.run(SpringBootDay1Application.class, args);
这个静态方法可以帮我们去运行内嵌的tomcat,并把服务启动起来。另外,参数2是启动springboot应用时候需要传递main函数参数args作为启动的第2个参数,main函数的参数args是用来在启动的时候去向程序传一堆JVM参数,通过这些参数就可以动态的覆盖某些配置。好处就是在启动的时候动态的向程序传一些参数,这些参数是动态的,日后在测试的时候就比较便与测试
-Dserver.port=8083
总结
配置文件拆分
在项目开发时一定含两个环境,一个是测试环境,一个是生产环境,无论是测试环境还是生产环境也好,可能仅仅只是有一些配置是不同的,但是有一些配置一定是相同的,一定会有一些公共的配置。日后可以基于环境单独的抽取两个配置文件,抽取的配置文件命名为application-xxx.yml,测试环境application-dev.yml、生产环境application-prod.yml,公共的配置还写在application.yml中,但是项目启动的时候只会读application.yml呀,所以需要在公共的application.yml告诉这次想要让哪个环境生效,配置哪个环境生效,如果配置了dev,那本次就是公共+dev,如果配置了prod,那本次就是公共+prod,如果什么都没配置,那就只有公共。
现在我们应用一下,我们让端口号为8081是公共的,但是项目名不一样,测试时是 server.servlet.context-path: /springboot_day1,但生产的时候是server.servlet.context-path: /springboot。所以公共application.yml中需要配置端口号、配置哪个环境生效比如测试环境(spring.profiles.active:dev)。接下来我们来演示一下:
application.yml配置文件中的内容:
# 公共配置 server: port: 8081 # 修改内嵌服务器的端口号 # 激活哪个环境配置 spring: profiles: active: prod # 写简名,简名就是yml配置文件名字中'-'后面的名字 让prod环境生效
application-dev.yml配置文件中的内容:
server: servlet: context-path: /springboot_day1 # 测试项目名
application-prod.yml配置文件中的内容:
server: servlet: context-path: /springboot # 生产项目名
加载外部配置
如果想要在启动springboot应用的时候,不想让它去读取resources下的任何一个配置,想让它以外部的完整配置为主,springboot也是支持的。那它是怎么支持的呢,它可以在启动springboot应用的时候去指定外部配置文件的位置。
创建一个完整的配置文件
指定外部配置文件的位置
--spring.config.location=D:/springbootcodes/application-local-prod.yml
第一种就是之前的环境搭建通过手工的方式构建SpringBoot应用。
另一种就是快速初始化,推荐使用这种方式,下面我们来看一下快速初始化的使用步骤:
- 创建单个对象
在springboot中可以管理单个对象可以直接使用spring框架中注解形式创建。
@Component
通用的对象创建注解
@Controller
用来创建控制器对象@Service
用来创建业务层对象@Repository
用来创建DAO层对象
DemoServiceImpl
DemoController
- 创建多个对象
如何在springboot中像spring框架一样通过xml创建多个对象,在SpringBoot中也提供了相同注解如**@Configuration + @Bean
**注解进行创建
@Configuration
代表这是一个spring的配置类相当于Spring.xml配置文件@Bean
用来在工厂中创建这个@Bean注解标识的对象