spring boot启动原理步骤分析
spring boot最重要的三个文件:1.启动类 2.pom.xml 3.application.yml配置文件
一.启动类->main方法
spring boot启动原理步骤分析
1.spring boot通过fat jar方式用jdk命令java -jar jarname.jar启动的。
fat jar就是包含被引用jar包的jar,因为会包含很多jar包,所以称为fat,肥胖。
2.spring boot通过static void main方法启动,main方法是java程序总是最先运行的地方,这个是由jvm虚拟机决定的。任何java程序都是这样。
main方法启动,里面是调用SpringApplication.run(StrartApplication.class, args);
1)springApplication的run()方法的,springApplication类是spring boot的类,run方法负责启动spring boot,首先扫描这个main类
2)main类是有@EnableAutoConfiguration修饰的,main调用springapplication.run()方法让spring boot启动,这个注解开始起作用。
@EnableAutoConfiguration作用是:根据maven pom的配置,“猜测”你是哪种应用程序(本地还是web),根据猜测去创建程序的环境。也就是spring环境,或者spring mvc环境。猜测出来后,也就环境创建好了,也就是springmvc,spring,spring boot环境创建成功。
3)spring boot环境(spring,spring mvc)创建好并启动后,就可以扫描启动bean类了,将扫描到的启动bean注入到ioc容器中,
通过@ComponentScan(basePackages = "com.pxj.oversea.*"),指定要扫描的类路径。
也就是开机就要创建的bean,将这些bean注入到spring的ioc中,供后面程序使用。
4)至此spring完全启动成功,扫描了要自动启动注入的bean,ioc容器已完全可以用。
那么哪些类要spring自动扫描并注入呢?
答:当然是那些controller之类的啦,有@restcontroller修饰的类,要对外提供服务啊,最至关重要的东西,核心服务当然要程序启动时候就启动啊
至此,一个spring boot的启动类就创建了,代码如下:pom.xml
/** * project starter access * @author PANXUEJUN725 * */ @EnableAutoConfiguration @ComponentScan(basePackages = "com.pxj.oversea.*") public class StrartApplication { public static void main(String[] args) { SpringApplication.run(StrartApplication.class, args); } }
spring boot最重要的pom配置如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.pxj.demo</groupId> <artifactId>pxj-oversea</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>pxj-oversea</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-parent</artifactId> <version>1.5.1.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <disable.checks>true</disable.checks> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.28</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.2.0</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc7</artifactId> <version>12.1.0.1.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>1.5.1.RELEASE</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>1.5.1.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.31</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>1.5.1.RELEASE</version> </dependency> </dependencies> <repositories> <repository> <id>central</id> <name>Central</name> <url>http://maven.paic.com.cn/repository/maven-public/</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>spring-milestones</name> <url>http://maven.paic.com.cn/repository/maven-public/</url> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.5.1.RELEASE</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> <defaultGoal>clean install package</defaultGoal> </build> </project>
spring boot的配置文件application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.driverClassName=oracle.jdbc.OracleDriver spring.datasource.url= jdbc:oracle:thin:pa18data/pa182007@10.20.128.181:1526:d0pa18