SpringBoot知识整合(上)

SpringBoot

Spring框架发展史

Spring1.x 时代

在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配
置文件中,需要频繁的在java类和xml配置文件中切换。

Spring2.x时代

随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置
文件,同时也大大简化了项目的开发。
那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:

  1. 应用的基本配置用xml,比如:数据源、资源文件等;
  2. 业务开发用注解,比如:Service中注入bean等;

Spring3.x到Spring4.x再到Spring5.x

从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处
于这个时代,并且Spring4.x、Spring5.x和Spring Boot都推荐使用java配置的方式。

Spring 5.X 应用零配置开发

Spring 框架从5.x版本推荐使用注解形式来对java应用程序进行开发与配置,并且可以完全替代原始的
XML+注解形式的开发,在使用注解形式进行项目开发与环境配置时,Spring 框架提供了针对环境配置与
业务bean开发相关注解。

注解

一、web mvc开发时,对于三层的类注解

1.1 @Controller

应用在MVC层(控制层),DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了@RequestMapping的方法上。

1.2 @Service

应用在service层(业务逻辑层)

1.3 @Reponsitory

应用在dao层(实现类)(数据访问层)

1.4 @component

表示一个带注释的类是一个“组件”,成为Spring管理的Bean。当使用基于注解的配置和类路径扫描时,这些类被视为自动检测的候选对象。同时@Component还是一个元注解。

注意: @Controller、@Service、@Reponsitory都组合了 @Component注解。为了区分三层不同的作用,因此分别为三层起了不同的名字。

二、依赖注入的注解

依赖注入有那种方式,++jdk中的@Resource,spring中的@Autowired++

2.1@Autowired

由Spring的依赖注入工具(BeanPostProcessor、BeanFactoryPostProcessor)自动注入,Spring提供的工具。这个注解是最常用的注解。

2.2 @Resource

依赖注入,给对象的属性注入数据,可以定义在字段上,也可以定义在方法上。一般用在注入dao层数据源,跟@Autowired相似,区别就是@Autowired默认是先根据类型,而@Resource默认是先根据名称。

2.3 @Resource、@Autowired的区别

@Resource的作用相当于@Autowired,只不过@Autowired默认按byType自动注入,而@Resource默认按byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为code>bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序:
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

2.4 @Value

由于@Autowired、@Qualifier、@Resource三者自动装配只能针对于注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现。因此有了@Value这个注解,@Value专门用来服务基本类型和String类型
@Value注解有一个value 属性:用于指定数据的值。它可以使用spring中SpEL(也就是spring的EL表达式)。SpEL的写法:${表达式},也可以类似mybatis中的 #{表达式} 的写法(SpEL的写法一般操作配置文件中数据)
总结:通过@Value注解将常量、配置文件中的值、其他bean的属性值注入到变量中,作为变量的初始值。支持表达式、直接赋值、配置文件三种方式。

2.5 @Data

lombok插件中的注解,用于自动生成get()、 set()、 toString()等方法

三、WEB 常用的注解

3.1 @RequestMapping

用来映射web请求(访问路径和参数),处理类和方法的。可以注解在类和方法上,注解在方法上的@RequestMapping路径会继承注解在类上的路径。同时支持Serlvet的request和response作为参数,也支持对request和response的媒体类型进行配置。其中有value(路径),produces(定义返回的媒体类型和字符集),method(指定请求方式)等属性。

注意:@GetMapping和@PostMapping是@RequestMapping的两种特例,一个是get方式请求,一个是post方式

3.2 @RequestParam

将请求参数绑定到你控制器的方法参数上(是springmvc中接收普通参数的注解)
语法1:
@RequestParam(value=”参数名”,required=“true/false”,defaultValue=””)
++value++:参数名
++required++:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。
++defaultValue++:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,
就使用默认值
语法2:
@RequestParam(“参数名”)

注意: url中请求的参数名称一定要和@RequestParam(value=“”)中value的值保持一致。

3.3 @PathVariable

@PathVariable 放置在参数前,用来接受路径参数。

@GetMapping(value = "hostelRooms/{id}")
public AjaxResult getInfo(@PathVariable(value="id") Long id){
    return success(hostelRoomsService.selectHostelRoomsById(id));
}
这里的{id}就是我们定义的变量规则,id是变量的名字, 注解@PathVariable(value=“id”) Long id 会获取变量的值为方法中的参数赋值
3.4 @RequestParam和@PathVariable区别

前者是在url中以参数方式传输,后者在请求url路径中根据变量传输,二者的应用场景建议如下:

1、当URL指向的是某一具体业务资源(或资源列表),使用@PathVariable
2、当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam

3.5 @ResponseBody和@RequestBody

@ResponseBody:将返回值放在response体内。返回的是数据而不是页面。在异步请求返回json数据时使用。
@RequestBody:允许request的参数在request体中,而不是在直接链接在地址的后面。此注解放置在参数前。比如:直接以String接收前端传过来的json数据

3.6 @RestController
  1. 组合注解,组合了@Controller和@ResponseBody,当我们只开发一个和页面交互数据的控制层的时候可以使用此注解。
  2. 使用此注解后,在方法层就不用添加@ResponseBody注解了,并且这个类中所有的方法都默认添加了@ResponseBody注解,都返回的是数据而不是界面。
3.7 @ControllerAdvice和@ExceptionHandler

@ControllerAdvice用在类上,声明一个控制器建言,它也组合了@Component注解,会自动注册为Spring的Bean。
@ExceptionHandler用在方法上定义全局处理,通过他的value属性可以过滤拦截的条件:@ExceptionHandler(value=Exception.class)–表示拦截所有的Exception。

四、Spring Boot常用的注解

4.1 @SpringBootApplication:启动

SpringBoot的核心注解,主要目的是开启自动配置。它也是一个组合注解,主要组合了@Configuration,@EnableAutoConfiguration(核心)和@ComponentScan。可以通过@SpringBootApplication(exclude={想要关闭的自动配置的类名.class})来关闭特定的自动配置,其中@ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。

4.2 @EnableAutoConfiguration:自动配置

此注释自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。该注解组合了@Import注解,@Import注解导入了EnableAutoCofigurationImportSelector类,它使用SpringFactoriesLoader.loaderFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。而spring.factories里声明了有哪些自动配置.

4.3 @Configuration:配置文件

等同于spring的XML配置文件;使用Java代码可以检查类型安全。

4.4 @ComponentScan:自动扫描

表示将该类自动发现扫描组件。如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。

五、AOP常用的注解

5.1 @Aspect:切面

声明一个切面

5.2 @After:后置建言

后置建言(advice),在原方法前执行

5.3 @Before:前置建言

前置建言(advice),在原方法后执行。

5.3 @Around:环绕

环绕建言(advice),在原方法执行前执行,在原方法执行后再执行(@Around可以实现其他两种advice)。

5.3 @PointCut:切点

声明切点,即定义拦截规则,确定有哪些方法会被切入

六、测试常用的注解

6.1 @SpringBootTest

@SpringBootTest注解是SpringBoot Since:1.4.0 版本开始引入的一个用于测试的注解。

6.2 @Test

将一个普通方法修饰为一个测试方法。

6.3 @RunWith

这个是Junit的注解,springboot集成了junit。一般在测试类里使用:@RunWith(SpringJUnit4ClassRunner.class)
— SpringJUnit4ClassRunner在JUnit环境下提供Sprng TestContext Framework的功能
最主要是声明测试的运行器,都在org.junit.runners下。
@RunWith(SpringRunner.class) ,表明这个类中的测试用例需要使用SpringRunner类来执行。

6.4 其他测试注解
  1. @Ignore : 用于暂时忽略某个测试方法或测试类
  2. @Before: 每一个测试方法之前运行
  3. @After : 每一个测试方法之后运行
  4. @BeforeClass: 所有测试开始之前运行
  5. @AfterClass: 所有测试结束之后运行

七、其他常用注解

7.1 @Transactional:事务声明

声明事务(一般默认配置即可满足要求,当然也可以自定义)

7.2 @Cacheable:缓存

声明数据缓存

7.3 @PropertySource:文件引入

指定文件地址。提供了一种方便的、声明性的机制,用于向Spring的环境添加PropertySource。与@configuration类一起使用。

实例-读取外部配置文件

在开发Java web 应用进行时,配置文件是比较常见的,比如xml,properties,yml等文件,在Spring 应用中
对于配置文件的读取同样提供支持。对于配置文件读取,我们可以通过@PropertySource 注解声明到类
级别来指定读取相关配置配置。
Spring El表达式语言,支持在Xml和注解中使用表达式,类似于JSP中EL表达式,Spring框架在借助该表
达式实现资源注入,主要通过@Value 注解来使用表达式,通过@Value 注解,可以实现普通字符串,表
达式运算结果,Bean 属性文件内容,属性文件等参数注入。具体使用如下:

准备properties 配置文件

src/main/resources 目录下添加user.properties jdbc.roperties 文件

# user.properties
user.userName=admin
user.password=admin
# jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/hr?useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
@PropertySource加载properties配置文件
@Configuration
@ComponentScan("com.shsxt")
@PropertySource(value =
{"classpath:jdbc.properties","classpath:user.properties"})
public class IocConfig {
@Value("${jdbc.driver}")
    private String url;
    @Value("${jdbc.url}")
    private String driver;
    @Value("${jdbc.username}")
    private String userName;
    @Value("${jdbc.password}")
    private String password;
    @Bean
    public AccountDao accountDao(){
        return new AccountDao();
   }
    // 控制台打印属性值信息
    public  void showConfigInfo(){
src/main/resources 目录下添加user.properties jdbc.roperties 文件
其他Bean对象获取properties文件内容
在需要读取配置文件值得属性上添加@Value("${}")
//获取properties配置文件中得定义得username的值
@Value("${user.userName}")
private String userName;

7.4 @Async:多线程异步方法

注解在方法上标示这是一个异步方法,在类上标示这个类所有的方法都是异步方法。

7.5 @EnableAsync:多线程

开启异步任务支持。注解在配置类上。

7.6 @EnableScheduling:开启计划任务

注解在配置类上,开启对计划任务的支持。

7.7 @Scheduled:计划任务

注解在方法上,声明该方法是计划任务。支持多种类型的计划任务:cron,fixDelay,fixRate。

组合注解与元注解

Spring 从2.x版本开始引入注解支持(目的是jdk1.5中推出注解功能),通过引入注解来消除大量xml 配
置,Spring 引入注解主要用来注入bean以及aop 切面相关配置,但由于注解大量使用,就会造成大量重复
注解代码出现,代码出现了重复,Spring 为了消除重复注解,在元注解上引入了组合注解,其实可以理
解为对代码的重构,相当于注解的注解,拥有元注解的原始功能,比如在定义配置类时用到的
@Configuration 注解就是组合注解,拥有Component 注解功能,即配置类本身也是一个被Ioc维护的
单例Bean。

自定义组合注解

1.设置元注解
@Retention(RetentionPolicy.RUNTIME)//定义指注解的保留策略,注解在何时生效,@Retention注解有三种保留策略:

  1. RetentionPolicy.SOURCE:编译器在编译时丢弃该注解,不会包含在编译后的class文件中。
  2. RetentionPolicy.CLASS:注解会被包含在class文件中,但在运行时会被JVM丢弃。
  3. RetentionPolicy.RUNTIME:注解会被包含在class文件中,并且在运行时可以通过反射机制获取到。

@Target(ElementType.TYPE)//定注解可以应用的目标元素类型,即注解可以放置在哪些程序元素上。
在Java中,@Target注解定义了一个ElementType枚举类型,表示注解可以应用的目标元素类型,包括以下几种:

ElementType.ANNOTATION_TYPE:可以应用在注解类型上。
ElementType.CONSTRUCTOR:可以应用在构造方法上。
ElementType.FIELD:可以应用在字段上。
ElementType.LOCAL_VARIABLE:可以应用在局部变量上。
ElementType.METHOD:可以应用在方法上。
ElementType.PACKAGE:可以应用在包上。
ElementType.PARAMETER:可以应用在方法参数上。
ElementType.TYPE:可以应用在类、接口(包括注解类型)或枚举声明上。

通过指定@Target注解,可以限制注解的使用范围,避免将注解错误地放置在不允许的元素上。

参考@MyCompScan注解
2.添加想要组合注解
定义MyCompScan 注解,拥有@ComponentScan 扫描器注解功能

/**
* 组合注解MyCompScan 定义
*   拥有元注解@Configuration + @ComponentScan 两者功能
*   覆盖value 属性
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Configuration
@ComponentScan
public @interface MyCompScan {
    //覆盖@Configuration注解里的扫描路径
    String[] value() default {};
}

SpringMVC零配置创建与部署

基于Spring Mvc 5.X 使用Maven搭建SpringMvc Web项目,通过Spring 提供的注解与相关配置来对项目进行创建与部署。

创建Spring Mvc Web工程

pom.xml添加坐标相关配置
<!-- spring web -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>
<!-- spring mvc -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.2.3.RELEASE</version>
</dependency>
<!-- web servlet -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
</dependency>
<build>
<finalName>springmvc</finalName>
<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
      <encoding>utf-8</encoding>
    </configuration>
  </plugin>
    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.4.27.v20200227</version>
      </plugin>
</plugins>
</build>
添加源代码
@Controller
public class HelloController {
 @RequestMapping("/index")
 public  String index(){
 return "index";
 }
}
添加视图

在WEB-INF/views 目录下创建index.jsp(这里以jsp为模板)

<html>
 <body>
  <h2>test web mvc</h2>
 </body>
</html>
SpringMvc配置类添加

自定义MvcConfig配置类,配置视图解析器
Spring Mvc 配置信息MvcConfig文件添加,作为Mvc 框架环境,原来是通过xml来进行配置(视图解析器,Json转换器,文件上传解析器等),这里基于注解通过继承WebMvcConfigurerAdapter类 并重写相关方法来进行配置(注意通过@EnableWebMvc注解来启动MVC环境)。

/**
* mvc 基本配置
*/
@Configuration
@EnableWebMvc
@ComponentScan("com.xxxx.springboot")
public class MvcConfig{
    @Bean
    public InternalResourceViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver=new
InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
   }
}

在构建Mvc应用时是通过容器,启动应用时加载web.xml 文件 实现配置文件加载,现在的环境web.xml文件不存在,此时基于注解方式构建的Mvc 应用,定义WebInitializer 实现WebApplicationInitializer接口(该接口用来配置
Servlet3.0+配置的接口,用于替代web.xml 配置),当servlet 容器启动Mvc应用时会通过SpringServletContainerInitializer接口进行加载 从而加载Mvc 应用信息配置。实现该接口onStartup 方法 ,加载应用信息配置。

入口文件代码添加
public class WebInitializer implements WebApplicationInitializer {
    @Override
    public void onStartup(ServletContext servletContext) throws ServletException
{
        AnnotationConfigWebApplicationContext ctx=new
AnnotationConfigWebApplicationContext();
        // 注册Mvc 配置信息
        ctx.register(MvcConfig.class);
        // 设置ServletContext 上下文信息
        ctx.setServletContext(servletContext);
        // 配置中央控制器Dispatcher
        ServletRegistration.Dynamic
servlet=servletContext.addServlet("dispatcher",new DispatcherServlet(ctx));
        servlet.addMapping("/");
        // 启动时即实例化Bean
        servlet.setLoadOnStartup(1);
   }
}

如果需要使用拦截器或者其他相关的配置,则需要继承父类WebMvcConfigurationSupport,重写相关方法

// 静态资源 handler不进行处理 直接响应到客户端
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer
configurer) {
    configurer.enable();
}
// 配置拦截器
@Bean
public LoginInterceptor loginInterceptor(){
    return new LoginInterceptor();
}
// 添加拦截器到mvc 环境
@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(loginInterceptor());
}

Spring Boot 概念&特点

Spring Boot是由Pivotal团队提供的一套开源框架,可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持,可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能,降低了复杂性,同时支持基于JVM的多种开源框架,可以缩短开发时间,使开发更加简单和高效。

Spring Boot 核心配置

Spring Boot 配置文件

Spring Boot 默认会读取全局配置文件,配置文件名固为:application.properties或application.yml,放置在src/main/resources资源目录下,使用配置文件来修改SpringBoot自动配置的默认值

1、参数配置化

image.png

2、yml配置文件(层级结构)

image.png
yml和yaml,格式一样
image.png
基本语法:

  1. 大小写敏感
  2. 数值前边必须有空格,作为分隔符
  3. 使用缩进表示层级关系,缩进时,不允许使用Tab键,只能用空格(idea中会自动将Tab转换为空格)
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  5. #表示注释,从这个字符一直到行尾,都会被解析器忽略
3、@ConfigurationProperties

使用步骤:
1、定义一个配置属性类
2、在类中定义getter和setter方法(@Data)
3、将类交给IOC容易管理,成为IOC容器中的bean对象(@Component)
4、使用@ConfigurationProperties定义前缀字段(@ConfigurationProperties(prefix = “前缀字段”))
给自定义的配置,配置提示依赖:
image.png
@configurationProperties 与@Value
相同点:

  • 都是用来注入外部配置的属性的。

不同点:

  • @Value注解只能一个一个的进行外部属性的注入。
  • @ConfigurationProperties可以批量的将外部的属性配置注入到bean对象的属性中。

Starter 坐标 & 自动化配置

Starter坐标配置

Spring Boot 引入了全新的Starter坐标体系,简化企业项目开发大部分场景的Starter pom,应用程序引入指定场景的Start pom 相关配置就可以消除 ,通过Spring Boot就可以得到自动配置的Bean。

自动化配置

springboot中项目中引入的starter 系列坐标对应的版本库统一由父工程坐标统一控制即项目中引入的parent标签。(spring-boot-dependencies 项目中定义了当前SpringBoot版本下各个starter 坐标版本以及依赖的其他坐标版本)

Spring Boot自动化配置

Spring Boot的项目一般都会有*Application的入口类,入口类中提供main方法,这是一个标准的Java应用程序的入口方法。@SpringBootApplication注解是Spring Boot的核心注解,它其实是一个组合注解:
@SpringBootApplication
image.png
该注解组合了@Configuration注解,对于Spring Boot应@SpringBootConfiguration 注解属于Boot 项目的配置注解也是属于一个组合注解,Spring Boot 项目中推荐使用@SpringBootConfiguration注解,因为其组合了@Configuration注解。
@EnableAutoConfiguration
image.png
@EnableAutoConfiguration注解组合了@AutoConfigurationPackage、@Import(AutoConfigurationImportSelector.class) 注解。
@Import(AutoConfigurationImportSelector.class) 自动配置的核心类
AutoConfigurationImportSelector.class,该类导入大量的自动配置类,debug可以发现,其读取的是classpath下的META-INF/spring.factories下配置文件。
image.png
@AutoConfigurationPackage底层也是一个@Import(AutoConfigurationPackages.Registrar.class),其会把启动类的包下组件都扫描到Spring容器中。
以WebMvcAutoConfiguration为例,可以看出该类使用@Configuration 注解进行标注其为一个配置类。
image.png
**注意:**spring.factories 文件中配置类默认不会都生效,具体哪些配置类生效由配置类上标注的@ConditionalOnClass 注解来决定。
@ConditionalOnClass 注解含义

  • @ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean
  • @ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化当前Bean
  • @ConditionalOnClass // 当给定的类名在类路径上存在,则实例化当前Bean
  • @ConditionalOnMissingClass // 当给定的类名在类路径上不存在,则实例化当前Bean

因此WebMvcAutoConfiguration 配置类生效需要环境中存在Servlet.class,
DispatcherServlet.class,WebMvcConfigurer.class实例,配置类才会生效。
结论:

Spring Boot通过maven中的starter导入了所需场景下的jar包,并通过主启动类上的@SpringBootApplication中的@EnableAutoConfiguration读取了类路径下的META-INF/spring.factories下EnableAutoConfiguration的配置类,这些配置类使用@ConditionalOnClass来标注,根据@ConditionalOnClass标注的约束条件来引入自动化的环境配置。

Profile 配置

Profile 是Spring 用来针对不同环境对不同配置提供支持的全局Profile配置使用application-{profile}.yml,比如application-dev.yml ,application-test.yml。
通过在application.yml中设置spring.profiles.active=test|dev|prod 来动态切换不同环境

  • application.yml 主配置文件
## 环境选择配置
spring:
 profiles:
   active: dev

日志配置

Spring Boot默认使用LogBack日志系统,如果不需要更改为其他日志系统如Log4j2等,则无需多余的配置,LogBack默认将日志打印到控制台上。

新建的Spring Boot项目一般都会引用 spring-boot-starter 或者 spring-boot-starter-web ,而这两个起步依赖中都已经包含了对于 spring-boot-starter-logging 的依赖,所以,无需额外添加依赖。

日志输出格式配置

修改application.yml文件添日志输出格式信息配置,可以修改application.yml文件来控制控制台日志输出格式,同时可以设置日志信息输出到外部文件。

logging:
 pattern:
   console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger- %msg%n"
   level: debug
 file:
   path: "."
   name: "springboot.log"

Freemarker & Thymeleaf视图技术集成

Freemarker 视图集成

SpringBoot内部支持Freemarker 视图技术的集成,并提供了自动化配置类FreeMarkerAutoConfiguration,借助自动化配置可以很方便的集成Freemarker基础到SpringBoot环境中。这里借助入门项目引入Freemarker环境配置。

  • starter坐标引入
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
  • 添加Freemarker 配置信息
    Freemarker 默认视图路径文 resources/templates 目录(由自动化配置类
    FreemarkerProperties 类决定),该目录可以进行在application.yml 中进行修改。
    image.png
    修改application.yml 添加freemarker 基本配置如下:
spring:
 freemarker:
   suffix: .ftl
   content-type: text/html
   charset: UTF-8
   template-loader-path: classpath:/views/
Thymeleaf视图集成

SpringBoot 支持多种视图技术集成,并且SpringBoot 官网推荐使用Thymeleaf 作为前端视图页面,这里实现Thymeleaf 视图集成,借助入门项目引入Thymeleaf 环境配置。

  • starter坐标引入
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • 添加Thymeleaf 配置信息
    Thymeleaf 默认默认视图路径文 resources/templates 目录(由自动化配置类
    FreemarkerProperties 类决定),该目录可以进行在application.yml 中进行修改。
    image.png
    修改application.yml 添加Thymeleaf 基本配置如下:
## 环境选择配置
spring:
 thymeleaf:
   prefix: classpath:/html/
    ## 关闭thymeleaf 页面缓存
   cache: false

SpringBoot 静态资源访问

Spring Boot 默认静态资源路径如下:

public class ResourceProperties {
    private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]
{"classpath:/META-INF/resources/", "classpath:/resources/", 
"classpath:/static/", "classpath:/public/"};
    private String[] staticLocations;
    private boolean addMappings;
    private final ResourceProperties.Chain chain;
    private final ResourceProperties.Cache cache;

可以看出存放路径默认在resources/static或者/public;可存放images、js、css等静态资源文件。

SpringBoot应用打包与部署

当项目开发完毕进行部署上线时,需要对项目进行打包操,入门中构建的项目属于普通应用,由于SpringBoot内嵌Tomcat容器,所有打包后的jar包默认可以自行运行。

Jar 包部署
配置打包命令

idea 下配置clean compile package -Dmaven.test.skip=true 执行打包命令,正常执行后target目录得到待部署的项目文件。

部署并访问

打开本地dos 窗口,执行jawva -jar 命令 部署已打好的jar包文件

war包部署

war 包形式部署Web 项目在生产环境中是比较常见的部署方式,也是目前大多数web 应用部署的方案,这里对于Spring Boot Web 项目进行打包部署步骤如下

pom.xml修改
  • 应用类型修改
    image.png-
  • 内嵌tomcat忽略
    构建SPringBoot应用时,引入的spring-boot-starter-web默认引入tomcat容器,这里忽略掉内容tomcat
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  <build>
    <!-- 配置生成的war文件名-->
    <finalName>springboot</finalName>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
Starter修改

添加容器启动加载文件(类似于读取web.xml),这里通过继承SpringBootServletInitializer 类并重写configure方法来实现,在部署项目时指定外部tomcat 读取项目入口方法。

@SpringBootApplication
public class Starter  extends SpringBootServletInitializer {
    private static Logger logger = LoggerFactory.getLogger(Starter.class);
    public static void main(String[] args) {
        logger.info("SpringBoot 应用开始启动...");
        SpringApplication.run(Starter.class);
   }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder
builder) {
        return  builder.sources(Starter.class);
   }
}

部署并访问
外部tomcat部署并访问
将打包好的war包放在tomcat文件夹下的webapps文件夹下,startup.bat启动tomcat以运行项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值