zoukankan      html  css  js  c++  java
  • spring boot中的约定优于配置

    Spring Boot并不是一个全新的框架,而是将已有的Spring组件整合起来。

    Spring Boot可以说是遵循约定优于配置这个理念产生的。它的特点是简单、快速和便捷。

    既然遵循约定优于配置,则有一些约定是需要去了解的。虽然说Spring Boot基本上舍弃了XML的配置,但是也不是说是零配置,因为约定也是需要配置来支持的,只是说减少了大量配置。

    starter依赖

    Spring Boot提供了一系列的Starter依赖来简化jar包依赖的配置。

    比如说spring-boot-starter-web等。

    运行方式

    spring-boot-starter-web中包含了Spring MVC的相关依赖(包含Json支持的Jackson和数据校验的Hibernate Vaildator)和一个内置的Tomcat容器,这使得再开发阶段可以直接通过main方法或是Jar包单独运行一个web项目。而在部署阶段也可以达成war包放到生产环境中运行。

    @SpringBootApplication
    public class Application extends SpringBootServletInitializer {
     
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
     
        public static void main(String[] args) throws Exception {
            SpringApplication.run(Application.class, args);
        }
     
    }

    在拥有@SpringBootApplication注解的类中,使用SpringApplication类的run方法可以通过Jar启动项目。

    如果要通过war来启动项目,则需要继承SpringBootServletInitializer类并实现configure方法,使用SrpingApplicationBuilder类实例的sources方法启动项目。

    配置文件

    Spring Boot提供了两种默认的配置文件,是在resources资源目录下的application.properties或application.yml。

    如果在项目中遇到application.properties出现中文乱码的问题,可以改用yaml。出现这个问题是因为Spring Boot总是会以iso-8859的编码方式读取该文件。而且yaml拥有更简洁的语法,因此更推荐使用application.yml作为默认的配置文件。

    配置文件中可以定义一个叫做spring.profiles.active的属性,这个属性可以根据运行环境自动读取不同的、额外的配置文件,例如将该属性定义为dev的话,Spring Boot就会额外地从application-dev.properties/application-dev.yml文件中读取该环境的配置。

    Spring Boot注入配置文件属性的方法有两种,一种是通过@Value注解接受配置文件中的属性,另外一种是通过@ConfigurationProperties注解通过set方法自动为Bean注入相应的属性。

    通过@Value注入属性,接收者既可以是方法参数,也可以是成员变量。

    @Bean
    public JedisPool jedisPool(@Value("${redis.host}") String host,
                                @Value("${redis.port}") int port) {
        return new JedisPool(host, port);
    }

    通过@ConfigurationProperties读取配置初始化Bean,会直接调用相应的set方法进行注入。

    @Bean(initMethod="init",destroyMethod="close")
    @ConfigurationProperties(prefix="dataSource")
    public DataSource dataSource() {
        return new DruidDataSource();
    }

    Servlet

    Servlet中最重要的配置文件就是web.xml,它的主要用途是配置Servlet映射和过滤器。而在Spring Boot中这将简单很多,只需要将对应的Servlet和Filter定义为Bean即可。

    声明一个映射根路径的Servlet,例如Spring MVC的DispatcherServlet:

    @Bean
    public DispatcherServlet dispatcherServlet() {
        return new DispatcherServlet();
    }

    需要注意的是,Spring Boot默认会自动创建DispatcherServlet的映射。但这是在项目中没有手动声明其他Servlet Bean的情况下,否则就需要也将这个Bean一起声明。

    声明一个映射特定路径的Servlet,或是需要配置初始化参数的话,则需要使用ServletRegistrationBean。

    例如Druid的StatViewServlet:

    @Bean
    public ServletRegistrationBean statViewServlet() {
        ServletRegistrationBean reg = new ServletRegistrationBean();
        reg.setServlet(new StatViewServlet());
        reg.addUrlMappings("/druid/*");
        return reg;
    } 

    声明过滤器也是如此,例如Spring MVC的CharacterEncodingFilter:

    @Bean
    public CharacterEncodingFilter characterEncodingFilter() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
        return filter;
    } 

    复杂一点的同样是通过类似的FilterRegistrationBean,例如:

    @Bean
    public FilterRegistrationBean appFilter() {
        FilterRegistrationBean reg = new FilterRegistrationBean();
        reg.setFilter(new LoggingFilter());
        reg.addUrlPatterns("/api/*");
        return reg;
    } 

    Spring MVC

    Spring MVC的主要配置都可以通过继承WebMvcConfigurerAdapter(或者WebMvcConfigurationSupport)类进行修改,这两个类的主要方法有:

    addFormatters:增加格式化工具(用于接收参数)

    configureMessageConverters:配置消息转换器(用于@RequestBody和@ResponseBody)

    configurePathMatch:配置路径映射

    addArgumentResolvers:配置参数解析器(用于接收参数)

    addInterceptors:添加拦截器

    总之几乎所有关于Spring MVC的配置都可以在这个类中配置。之后只需要将其设为配置类,即在类上注解@Configuration,Spring Boot就会在运行时加载这些配置。

    还有一些常用的Bean默认会自动创建,但是可以通过自定义进行覆盖,例如负责@RequestBody和@RequestBody进行转换的MappingJackson2HttpMessageConverter和ObjectMapper,可以直接这样覆盖掉:

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        return new CustomMappingJackson2HttpMessageConverter();
    }
     
    @Bean
    public ObjectMapper jsonMapper(){
        ObjectMapper objectMapper = new ObjectMapper();
        // null输出空字符串
        objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer() {
        @Override
        public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
          jgen.writeString(“”);
        }
      });
      return objectMapper;
    } 

    DataSource

    如果使用了spring-boot-starter-data-jpa,Spring Boot将会自动创建一个DataSource Bean。可以直接在配置文件中定义它的属性,前缀是spring.datasoruce。并且无需指定数据库的方言,这个Bean会自动根据项目中依赖的数据库驱动判断使用的是那种数据库。

    同样的,如果使用了spring-boot-starter-data-redis,也会创建RedisTemplate、ConnectionFactory等Bean。也同样可以在配置文件中定义属性,前缀是spring.redis。

    一、Maven的目录结构:

    默认有resources文件夹存放配置文件。
    默认打包方式为jar。
    二、默认的配置文件:application.properties 或 application.yml 文件

    三、默认通过 spring.profiles.active 属性来决定运行环境时的配置文件。

    四、EnableAutoConfiguration 默认对于依赖的 starter 进行自动装载。

    五、spring-boot-start-web 中默认包含 spring-mvc 相关依赖以及内置的 tomcat 容器,使得构建一个 web 应用更加简单。

  • 相关阅读:
    centos7.6 安装与配置 MongoDB yum方式
    MongoDB 介绍
    centos 关闭selinux
    前端 HTML标签属性
    前端 HTML 标签嵌套规则
    前端 HTML 标签分类
    前端 HTML body标签相关内容 常用标签 表单标签 form里面的 input标签介绍
    前端 HTML body标签相关内容 常用标签 表单标签 form 表单控件分类
    前端 HTML form表单标签 select标签 option 下拉框
    POJ 1426
  • 原文地址:https://www.cnblogs.com/mike-mei/p/15241915.html
Copyright © 2011-2022 走看看