㈠ SpringBoot 如何调整 Ehcache加载顺序,使其在Tomcat初始化后再初始化
你可以实现开放接口ApplicationRunner,代码参照如下:
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// TODO
}
}
run方法会在容器启动完成后立马调用。
㈡ 第二章:SpringBoot与JSP间不可描述的秘密
springboot 内部对jsp的支持并不是特别理想,而 springboot 推荐的视图是 Thymeleaf ,对于 java 开发人员来说还是大多数人员喜欢使用jsp,接下来我们来讲解下 springboot 是如何支持jsp的。
整合springboot web项目支持jsp作为视图输出。
恒宇少年在博客整理出来了SpringBoot、ApiBoot、SpringCloud的文章汇总【 SpringBoot基础教程专题 】,【 SpringCloud基础教程专题 】,【 ApiBoot组件使用专题 】
我们使用IntelliJ IDEA 工具来构建项目,首先我们需要创建一个springboot项目,如下图1所示.
点击Next后输入一些项目的基本参数(包名,工程名,打包形式,maven形式构建等),如下图2所示:
点击Next后选择我们预先加入到工程的springboot内置的jar包组件,我们这里选择一个web组件。如下图3所示:
点击 Next 输入项目名称后店家 Finish 既可以完成了项目的构建。新构建的项目目录结构如下图4所示:
可以看到上图中比我们 lessonOne 项目中多出来了一个类文件, ServletInitlalizer ,打开该类我们不难发现它继承了 SpringBootServletInitializer 这个父类,而 SpringBootServletInitializer 这个类是 springboot 提供的 web 程序初始化的入口,当我们使用外部容器(后期文章讲解使用外部tomcat如何运行项目)运行项目时会自动加载并且装配。
实现了 SpringBootServletInitializer 的子类需要重写一个configure方法,方法内自动根据 LessontwoApplication .class的类型创建一个 SpringApplicationBuilder 交付给 springboot 框架来完成初始化运行配置。
我们打开pom.xml(maven配置文件)可以看到我们之前构建项目时已经添加了web模块,而springboot给我们自动添加了 spring-boot-starter-tomcat 配置引入。springboot内部集成了tomcat组件,这里我们就不需要重复引入tomcat组件。
我们先来添加jsp的maven支持,如下图4所示:
我们还需要引入jsp对servlet容器的支持,如下图5所示:
除了上面的jsp,servlet支持以外,如果你还需要在jsp页面使用jstl标签来处理界面逻辑,那么需要引入jstl maven,如下图6所示:
上面配置就是我们本章需要的全部配置,那么我们先来尝试运行下项目是否已经可以正常运行。这里项目运行也可以使用IntelliJ IDEA工具提供的组件来完成,如下图7所示,:
(注意:如果你已经开启了另外一个spring boot项目请先关闭,因为springboot内置的端口号都是8080这样会引起冲突)
点击绿色三角号即可开始运行项目,我们先来尝试下点击后看看控制台输入的日志信息。可以看到项目已经正常运行了,右上角的绿色三角号也变成了重启的按钮,如下图8所示:
项目运行如图9所示:
可以看到项目已经正常运行,但是我们现在还没有配置,创建JSP文件,我们接下来开始配置,创建JSP。
如果是使用过eclipse工具的人肯定知道jsp文件之前是在/webapp/WEB-INF/jsp目录下,那么我们也沿用eclipse的风格。
1. 在main目录下创建webapp文件夹
2. 在webapp下创建jsp文件夹如下图10所示:
3. 修改application.properties文件让springmvc支持视图的跳转目录指向为/main/webapp/jsp,配置如下图11所示:
我们在webapps/jsp目录下创建一个index.jsp用于测试我们的配置是否已经支持了jsp,新建jsp文件如下图12所示:
上面工作我们已经完成了jsp的所有配置,那么接下来我们需要配置springmvc的控制器,我们新建indexController如下图13所示:
可以看到上图我们在IndexController配置文件内添加了index()方法配置了@RequestMapping注解来描述index()方法是一个可以被springmvc管理的请求视图。我们的index()方法返回值这里是"index"。
为什么我们返回"index",还记得上述步骤中配置的application.properties文件的springmvc请求前缀以及后缀,那么当我们访问/index时springmvc就会去找/webapp/WEB-INF/jsp/index.jsp文件。
重启项目我们尝试访问 127.0.0.1:8080/index ,可以看到如下图14的效果,证明已经完成了springboot与jsp的整合:
上述便是我们本章的全部内容,本章主要是讲解了springboot集成jsp作为渲染视图,结合springmvc来转发请求。
本章内容已经上传到码云:
SpringBoot配套源码地址: https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源码地址: https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相关系列文章请访问: 目录:SpringBoot学习目录
QueryDSL相关系列文章请访问: QueryDSL通用查询框架学习目录
SpringDataJPA相关系列文章请访问: 目录:SpringDataJPA学习目录
SpringBoot相关文章请访问: 目录:SpringBoot学习目录 ,感谢阅读!
知识星球 - 恒宇少年
㈢ SpringBoot运行原理
SpringBoot是一个基于Spring开发,集成了大量第三方库配置的javaweb开发框架
pom.xml
父依赖
其中它主要是依赖一个父项目,主要是管理项目的资源过滤及插件。以后我们导入依赖默认是不需要写版本的。
启动器spring-boot-starter
springboot-boot-starter-xxx:spring-boot的场景启动器
spring-boot-starter-web:帮我们导入了web模块正常运行所依赖的组件。
springBoot将所有的功能场景都抽取出来,做成一个个的starter(启动器),只需要在项目中引入这些starter即可,所有相关的依赖都会被引进来,我们要用什么功能就导入什么样的场景启动器即可。
@SpringBootApplication
作用:标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot运行这个类的main方法来启动SpringBoot应用。
进入这个注解,里面包含了很多其他注解
@ComponentScan作用:自动扫描并加载符合条件的组件或者bean,将这个bean定义加载到IOC容器中。
@SpringBootConfiguration作用:SpringBoot的配置类,标注在某个类上,表示这是一个SpringBoot的配置类。
进入@SpringBootConfiguration注解查看,这里的@Configuration说明这是一个配置类,配置类对应Spring的xml配置文件。
继续查看@SpringBootConfiguration包含的其他注解
@EnableAutoConfiguration:开启自动配置功能
进入@EnableAutoConfiguration注解查看
@AutoConfigurationPackage自动配置包
@import:Spring底层注解@import,给容器中导入一个组件
@Import({.class})给容器导入组件
:自动配置导入选择器。那么它导入哪些组件的选择器呢
这个类中有这样一个方法:getCandidateConfiguration,而在这个方法中有调用了SpringFactoriesLoader类的静态方法loadFactoryNames()方法
进入loadSpringFactories方法
根据全局搜索Spring.factories,打开后是自动配置的文件。
随便打开一个其中的自动配置类看,它们都是javaConfig配置类,都注入了一些Bean
所以,自动配置真正实现是从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中对应的org.springframework.boot.autoconfigure包下的配置项通过反射实例化为对应标注了@Configuration的javaConfig形式的IOC容器配置类,然后将这些都汇总成为一个实例并加载到IOC容器中。
结论:
1.SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
2.将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作。
3.整个J2EE的整体解决方案和自动配置都在springboot-autoConfigure的jar包中。
4.它会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件。
5.有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。
SpringApplication
这个类主要做了以下四件事
1.推断应用的类型是普通的项目还是web项目
2.查找并加载所有可用初始化器,设置到initializers属性中
3.找出所有的应用程序监听器,设置到listeners属性中
4.推断并设置main方法的定义类,找到运行的主类
㈣ spring boot 怎么创建web
Spring Boot充分利用了JavaConfig的配置模式以及“约定优于配置”的理念,能够极大的简化基于Spring
MVC的Web应用和REST服务开发。
Spring
4倡导微服务的架构,针对这一理念,近来在微博上也有一些有价值的讨论,如这里和这里。微服务架构倡导将功能拆分到离散的服务中,独立地进行部署,Spring
Boot能够很方便地将应用打包成独立可运行的JAR包,因此在开发模式上很契合这一理念。目前,Spring
Boot依然是0.5.0的里程碑版本,因此相关的文档尚不完善,本文将会以一个简单的样例来介绍基于这个项目的开发过程。
要Spring
Boot进行功能开发,需要使用Gradle或者Maven作为构建工具。在本例中,我们会使用Eclipse和Maven插件进行开发。要使用Spring
Boot,首先创建一个Maven工程,并修改Maven主要的配置文件pom.xml,如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>0.5.0.M7</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring3</artifactId>
</dependency>
</dependencies>
<properties>
<start-class>com.levin.Application</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestone</id>