zoukankan      html  css  js  c++  java
  • Spring Boot核心

    基本配置

    入口类和@SpringBootApplication

    Spring Boot通常有一个名为*Application的入口类,入口类里面有一个mian方法,这个main方法其实就是一个标准的java应用的入口方法,在main方法中使用SpringApplication.run,启动Spring Boot应用项目

    @SpringBootApplication是Spring Boot的核心注解,它是一个组合注解,源码如下:

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @SpringBootConfiguration
    @EnableAutoConfiguration
    @ComponentScan(
        excludeFilters = {@Filter(
        type = FilterType.CUSTOM,
        classes = {TypeExcludeFilter.class}
    ), @Filter(
        type = FilterType.CUSTOM,
        classes = {AutoConfigurationExcludeFilter.class}
    )}
    )
    public @interface SpringBootApplication {
        @AliasFor(
            annotation = EnableAutoConfiguration.class
        )
        Class<?>[] exclude() default {};
    
        @AliasFor(
            annotation = EnableAutoConfiguration.class
        )
        String[] excludeName() default {};
    
        @AliasFor(
            annotation = ComponentScan.class,
            attribute = "basePackages"
        )
        String[] scanBasePackages() default {};
    
        @AliasFor(
            annotation = ComponentScan.class,
            attribute = "basePackageClasses"
        )
        Class<?>[] scanBasePackageClasses() default {};
    }
    

    @SpringBootApplication注解主要组合了@Configuration,@EnableAutoConfiguration,@ComponentScan;若不使用@SpringBootApplication注解,则可以在入口类上直接使用@Configuration,@EnableAutoConfiguration,@ComponentScan

    其中,@EnableAutoConfiguration 让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置。

    例如,添加了spring-boot-starter-web依赖,会自动添加Tomcat和Spring MVC的依赖,那么Spring Boot会对Tomcat和Spring MVC进行自动配置。

    又如,添加了spring-boot-starter-data-jpa依赖,Spring Boot会自动进行JPA相关的配置。

    Spring Boot 会自动扫描@SpringBootApplication所在类的同级包以及下级包里的Bean(若为JPA项目还可以扫描标注@Entity的实体类)。建议入口类放置的位置在groupld+arctifactID组合的包名下。

    关闭特定的自动配置

    通过上面的@SpringBootApplication的源码我们可以看出,关闭特定的自动配置应该使用@SpringBootApplication注解的exclude参数

    @ SpringBootApplication (exclude ={ DataSourceAutoconfiguration.class})
    

    定制Banner

    1.修改Banner
    (1)在SpringBoot启动的时候会有一个启动图案

    (2)我们在src/main/resources 下新建一个banner.txt
    (3)通过http://patorjk.com/software/taag网站生成字符,如敲入的为"anxin",将网站生成的字符复制到banner中
    (4)这时再启动程序,图案将变为这个样子

    Spring Boot的配置文件

    Spring Boot使用一个全局的配置文件application.properties 或 application.yml 放置在src/main/resources 目录或者类路径的/config下

    Spring Boot 不仅支持常规的properties配置文件,还支持yaml语言的配置文件.yaml是以数据为中心的语言,在配置数据的时候具有面向对象的特征

    Spring Boot的全局配置文件的作用是对一些默认配置的配置值进行修改
    1.简单演示一下
    将Tomcat的默认端口号8080修改为6060,并将默认的访问路径“/”修改为“/helloboot”。
    可以在application.properties中添加:

    server.port=6060
    server.servlet.context-path=/helloboot
    

    这样我们再去访问服务器就是这样的

    starter pom

    Spring Boot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需要的starter pom,相关的技术配置将会消除,就可以得到Spring Boot为我们提供的自动配置的Bean。
    1.官方starter pom

    2.第三方starter pom
    除官方的starter pom外,还有第三方为Spring Boot 所在的starter pom

    使用xml配置

    Spring Boot 提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用xml配置,这时我们可以通过Spring 提供的@ImportResource来加载xml配置

    @ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})
    

    外部配置

    Spring Boot 允许使用properties文件、yaml文件或者命令行参数作为外部配置。

    命令行参数配置

    Spring Boot可以基于jar包运行的,打成jar包的程序可以直接通过下面命令运行

    java -jar xx.jar
    

    可以通过以下命令修改Tomcat端口号

    java -jar xx.jar --server.port=6060
    

    常规属性配置

    之前我们在常规Spring环境下,注入properties文件里的值的方式,通过@PropertySource指明properties文件的位置,然后通过@Value注入值,在Spring Boot里,我们只需要application.properties定义属性,直接使用@Value注入即可

    (1)application增加属性

    book.author=wangjinlong
    book.name=spring boot
    

    (2)修改入库类

    
    @SpringBootApplication
    @RestController
    public class Springbootch6Application {
    
        @Value("${book.author}")
        private String bookAuthor;
        @Value("${book.name}")
        private String bookName;
    
        @RequestMapping("/")
        public String index(){
            return "book name is:"+bookName+"and book author is:"+bookAuthor;
        }
        
        public static void main(String[] args) {
            SpringApplication.run(Springbootch6Application.class, args);
        }
    }
    

    (3)运行效果

    类型安全的配置(基于properties)

    上面代码中使用@Value注入每个配置在实际项目中会显得格外麻烦,因为我们的配置通常会是许多个,若使用上例的方式则要使用@Value注入很多次。

    Spring Boot还提供了基于类型安全的配置方式,通过@ConfigurationProperties将properties属性和一个Bean及其属性关联,从而实现类型安全的配置。

    (1)新建Spring Boot 项目
    (2)添加配置,即在application.properties上添加

    author.name=wjl
    author.age=20
    

    当然,我们也可以新建一个properties文件,这就需要我们使用@PropertySource的属性value 里指定properties的位置,且需要在入口类上配置。

    (3)类型安全的Bean

    
    @Component
    @ConfigurationProperties(prefix = "author")
    @PropertySource(value = "classpath:author.properties", encoding = "UTF-8")
    public class AuthorSettings {
        private String name;
        private Long age;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Long getAge() {
            return age;
        }
    
        public void setAge(Long age) {
            this.age = age;
        }
    }
    

    通过@ConfigurationProperties中的prefix属性指定properties的配置的前缀
    (4)检验代码

    @RestController
    @SpringBootApplication
    public class Ch6_2_3Application {
    
        @Autowired
        public AuthorSettings authorSettings;
    
        @RequestMapping("/")
        public String index(){
            return "author name is   "+authorSettings.getName()+"   and author age is  "+authorSettings.getAge();
        }
    }
    

    (5)运行效果

    日志配置

    Spring Boot 支持Java Util Logging、Log4J、Log4J2和Logback作为日志框架,无论使用哪种日志框架,Spring Boot已为当前使用日志框架的控制台输出及文件输出做好了配置
    默认情况下,Spring Boot 使用Logback作为日志框架
    配置日志级别

    logging.file=D:/mylog/log.log
    

    配置日志文件,格式为logging.level.包名=级别:

    logging.level.org.springframework.web=DEBUG
    

    Profile配置

    Profile是Spring用来针对不同的环境对不同的配置提供支持的,全局Profile配置使用application-{profile}.properties(如application-prod.properties)。

    通过在application.properties 中设置spring.profiles.active=prod 来指定活动的Profile。

    下面将做一个最简单的演示,如我们分为生产(prod)和开发(dev)环境,生产环境下端口号为80,开发环境下端口为8888。
    (1)新建Spring Boot项目
    (2)生产和开发环境下的配置文件如下
    application-prod.properties

    server.port=80
    

    application-dev.properties

    server.port=8888
    

    (3)运行
    application.properties增加

    spring.profiles.active=dev
    

    运行效果

    这边是参考的javaEE开发的颠覆者这本书来做的笔记
    当然我们这边只是说了一小步部分的核心技术,还有很多内容需要大家自己去做深入的研究
    写的不好还有不懂的地方,大家可以留言一下 我会尽量解决
    觉得对你帮助的话,就点个赞把!
    by安心

  • 相关阅读:
    OutputCache 缓存key的创建 CreateOutputCachedItemKey
    Asp.net Web Api源码调试
    asp.net mvc源码分析DefaultModelBinder 自定义的普通数据类型的绑定和验证
    Asp.net web Api源码分析HttpParameterBinding
    Asp.net web Api源码分析HttpRequestMessage的创建
    asp.net mvc源码分析ActionResult篇 RazorView.RenderView
    Asp.Net MVC 项目预编译 View
    Asp.net Web.config文件读取路径你真的清楚吗?
    asp.net 动态创建TextBox控件 如何加载状态信息
    asp.net mvc源码分析BeginForm方法 和ClientValidationEnabled 属性
  • 原文地址:https://www.cnblogs.com/anxin0/p/9970337.html
Copyright © 2011-2022 走看看