Spring Boot(四):功能

41 篇文章 0 订阅
16 篇文章 0 订阅

          本节将深入介绍Spring Boot。

Spring应用

      本SpringApplication类提供了一个方便的方式来引导该从开始Spring应用程序main()的方法。在许多情况下,您可以委派给静态SpringApplication.run方法,如以下示例所示:

public static void main(String[] args) {
    SpringApplication.run(MySpringConfiguration.class, args);
}

      当您的应用程序启动时,您应该看到类似于以下输出的内容:

 。____ _ __ _ _ _
 / \\ / ___'_ __ _ _(_)_ __ __ _ _ \ \ \ \
(()\ ___ |'_ |'_ | |'_ \ / _` | \ \ \ \
 \\ / ___)| | _)| | | | | || (_ | |))))
  '| ____ | .__ | _ | | _ | _ | | _ \ __,| / / / /
 ======== | _ | ============= | ___ / = / _ / _ / _ /
 :: Spring Boot :: v2.2.0.RELEASE
2019-10-18 10:11:16.207  INFO 9252 --- [  restartedMain] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2019-10-18 10:11:16.579  INFO 9252 --- [  restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: ServletContext resource [/index.html]
2019-10-18 10:11:16.726  WARN 9252 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
2019-10-18 10:11:16.772  INFO 9252 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-10-18 10:11:16.774  INFO 9252 --- [  restartedMain] com.reyco.kn.core.KNApplication          : Started KNApplication in 2.404 seconds (JVM running for 2.929)

         默认情况下,显示INFO日志消息,包括一些相关的启动详细信息,例如启动应用程序的用户。如果您需要除以外的其他日志级别INFO,则可以按照日志级别中所述进行设置。

1. 启动失败

         如果您的应用程序无法启动,则注册FailureAnalyzers后将有机会提供专门的错误消息和解决该问题的具体措施。例如,如果您在端口上启动Web应用程序8080并且该端口已在使用中,则应该看到类似以下消息的内容:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-10-18 10:16:14.308 ERROR 8040 --- [  restartedMain] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured.

Action:

Verify the connector's configuration, identify and stop any process that's listening on port 8081, or configure this application to listen on another port.

2019-10-18 10:16:14.312  INFO 8040 --- [  restartedMain] o.s.s.c.ThreadPoolTaskScheduler          : Shutting down ExecutorService 'taskScheduler'

2. 延迟初始化

   SpringApplication允许延迟初始化应用程序。启用延迟初始化后,将根据需要创建bean,而不是在应用程序启动期间创建bean。因此,启用延迟初始化可以减少应用程序启动所需的时间。在Web应用程序中,启用延迟初始化将导致许多与Web相关的Bean直到收到HTTP请求后才被初始化。

         延迟初始化的缺点是,它可能会延迟发现应用程序问题的时间。如果错误配置的Bean延迟初始化,则启动期间将不再发生故障,并且只有在初始化Bean时问题才会变得明显。还必须注意确保JVM有足够的内存来容纳所有应用程序的bean,而不仅仅是启动期间初始化的bean。由于这些原因,默认情况下不会启用延迟初始化,因此建议在启用延迟初始化之前先对JVM的堆大小进行微调。

         可以使用lazyInitializationon方法SpringApplicationBuildersetLazyInitializationon 方法以编程方式启用延迟初始化SpringApplication。或者,可以使用spring.main.lazy-initialization以下示例中所示的属性来启用它:

spring.main.lazy-initialization=true

3. 自定义横幅

        可以通过将banner.txt文件添加到类路径或将spring.banner.location属性设置为此类文件的位置来更改启动时打印的横幅。如果文件的编码不是UTF-8,则可以设置spring.banner.charset。除了一个文本文件,你还可以添加一个banner.gifbanner.jpgbanner.png图像文件到类路径或设置spring.banner.image.location属性。图像将转换为ASCII艺术作品并打印在任何文字横幅上方。

        在banner.txt文件内部,可以使用以下任意占位符:

${application.version}

您的应用程序的版本号,如中所述MANIFEST.MF。例如,Implementation-Version: 1.0打印为1.0。

${application.formatted-version}

您的应用程序的版本号,已声明MANIFEST.MF并进行了格式显示(用括号括起来,并带有前缀v)。例如(v1.0)。

${spring-boot.version}

您正在使用的Spring Boot版本。例如2.2.0.RELEASE。

${spring-boot.formatted-version}

您正在使用的Spring Boot版本,其格式用于显示(用括号括起来,并带有前缀v)。例如(v2.2.0.RELEASE)。

${Ansi.NAME}(或${AnsiColor.NAME},${AnsiBackground.NAME},${AnsiStyle.NAME})

NAMEANSI转义代码的名称在哪里。有关AnsiPropertySource详细信息,请参见。

${application.title}

您的应用程序的标题,如中所述MANIFEST.MF。例如Implementation-Title: MyApp打印为MyApp。

4. 自定义SpringApplication

        如果SpringApplication默认设置不符合您的喜好,则可以创建一个本地实例并对其进行自定义。例如,要关闭横幅,您可以编写:

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(MySpringConfiguration.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.run(args);
}

          也可以SpringApplication通过使用application.properties文件来配置。有关详细信息,请参见spring boot相关文档

5. 应用程序事件和监听器

         有些事件实际上ApplicationContext是在创建之前触发的,因此您无法将其注册为@Bean。您可以使用SpringApplication.addListeners(…​)方法或SpringApplicationBuilder.listeners(…​)方法注册它们。

         如果您希望这些侦听器自动注册,而不管创建应用程序的方式如何,都可以将META-INF/spring.factories文件添加到项目中,并使用org.springframework.context.ApplicationListener键引用您的侦听器,如以下示例所示:

org.springframework.context.ApplicationListener = com.example.project.MyListener

6.属性中的占位符

          使用中的值时,它们会application.properties通过现有的值进行过滤Environment,因此您可以参考以前定义的值(例如,从“系统”属性中)。

app.name=MyApp
app.description=${app.name} is a Spring Boot application

7.使用YAML代替属性

          YAML是JSON的超集,因此是一种用于指定层次结构配置数据的便捷格式。该SpringApplication级自动支持YAML来替代,只要你有属性SnakeYAML在classpath库。

          例如,考虑以下YAML文档:

environments:
    dev:
        url: https://dev.example.com
        name: Developer Setup
    prod:
        url: https://another.example.com
        name: My Cool App

           前面的示例将转换为以下属性: 

environments.dev.url=https://dev.example.com
environments.dev.name=Developer Setup
environments.prod.url=https://another.example.com
environments.prod.name=My Cool App

           YAML列表表示为带有[index]解引用器的属性键。例如,考虑以下YAML:          

my:
   servers:
       - dev.example.com
       - another.example.com

            前面的示例将转换为以下属性:

my.servers[0]=dev.example.com
my.servers[1]=another.example.com

             要使用Spring Boot的Binder实用程序绑定属性(@ConfigurationProperties确实如此),您需要在类型为java.util.List(或Set)的目标bean中具有一个属性,并且需要提供setter或使用可变值对其进行初始化。例如,以下示例绑定到前面显示的属性:

@ConfigurationProperties(prefix="my")
public class Config {

    private List<String> servers = new ArrayList<String>();

    public List<String> getServers() {
        return this.servers;
    }
}

8.日志        

        Spring Boot使用Commons Logging进行所有内部日志记录,但是使底层日志实现保持打开状态。为Java Util LoggingLog4J2Logback提供了默认配置。在每种情况下,记录器都已预先配置为使用控制台输出,同时还提供可选文件输出。

         默认情况下,如果使用“启动器”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util Logging,Commons Logging,Log4J或SLF4J的从属库都可以正常工作。

        1). 日志格式

             Spring Boot的默认日志输出类似于以下示例:

2019-10-18 11:17:08.248  INFO 10008 --- [  restartedMain] o.s.s.c.ThreadPoolTaskScheduler          : Initializing ExecutorService 'taskScheduler'
2019-10-18 11:17:08.580  INFO 10008 --- [  restartedMain] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: ServletContext resource [/index.html]
2019-10-18 11:17:08.700  WARN 10008 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : Unable to start LiveReload server
2019-10-18 11:17:08.737  INFO 10008 --- [  restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2019-10-18 11:17:08.739  INFO 10008 --- [  restartedMain] com.reyco.kn.core.KNApplication          : Started KNApplication in 2.145 seconds (JVM running for 2.534)

      输出以下项目:

  • 日期和时间:毫秒精度,易于排序。

  • 日志级别:ERRORWARNINFODEBUG,或TRACE

  • 进程ID。

  • 一个---分离器来区分实际日志消息的开始。

  • 线程名称:用方括号括起来(对于控制台输出可能会被截断)。

  • 记录器名称:这通常是源类名称(通常缩写)。

  • 日志消息。

       2). 输出文件

             默认情况下,Spring Boot仅记录到控制台,不写日志文件。如果除了控制台输出外还想写日志文件,则需要设置一个logging.file.namelogging.file.path属性      

 logging.file.name:写入指定的日志文件。名称可以是确切位置,也可以是相对于当前目录的位置。

 logging.file.path:写入spring.log指定的目录。名称可以是确切位置,也可以是相对于当前目录的位置。

             日志文件达到10 MB时会旋转,并且与控制台输出一样,默认情况下会记录ERROR-level,WARN-level和INFO-level消息。可以使用该logging.file.max-size属性更改大小限制。除非logging.file.max-history已设置属性,否则以前旋转的文件将无限期存档。日志档案的总大小可以使用设置上限logging.file.total-size-cap。当日志归档的总大小超过该阈值时,将删除备份。要在应用程序启动时强制清除日志存档,请使用该logging.file.clean-history-on-start属性。

         3). 日志级别

                  所有支持的日志系统可以在弹簧设置的记录器级别Environment(例如,application.properties通过使用)logging.level.<logger-name>=<level>,其中level为TRACE,DEBUG,INFO,WARN,ERROR,FATAL或OFF之一。该root记录器可以通过使用被配置logging.level.root

                   以下示例显示了中的潜在日志记录设置application.properties

logging.level.root=warn
logging.level.org.springframework.web=debug
logging.level.org.hibernate=error

           4). 自定义日志配置

                  我们建议您将-spring变体用于日志记录配置(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring将无法完全控制日志初始化。

   9. 国际化

             Spring Boot支持本地化消息,因此您的应用程序可以迎合不同语言首选项的用户。默认情况下,Spring Boot messages在类路径的根目录下查找资源束的存在。

10. 静态资源

           默认情况下,Spring Boot从类路径中名为/static/public/resources/META-INF/resources)的目录或根目录提供静态内容ServletContext。它使用ResourceHttpRequestHandlerSpring MVC中的from,因此您可以通过添加自己WebMvcConfigureraddResourceHandlers方法并覆盖该方法来修改该行为。

            默认情况下,资源映射到/**,但是您可以使用spring.mvc.static-path-pattern属性对其进行调整。例如,将所有资源重新定位/resources/**可以通过以下方式实现:

spring.mvc.static-path-pattern=/resources/**

             您还可以通过使用spring.resources.static-locations属性来自定义静态资源位置(用目录位置列表替换默认值)。根Servlet上下文路径,"/"也会自动添加为一个位置。

             要使用缓存清除,以下配置为所有静态资源配置了缓存清除解决方案:

spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**

11. 欢迎页面

          Spring Boot支持静态和模板欢迎页面。它首先index.html在配置的静态内容位置中查找文件。如果未找到,则寻找index模板。如果找到任何一个,它将自动用作应用程序的欢迎页面。

12. 自定义图标 

           与其他静态资源一样,Spring Boot favicon.ico在配置的静态内容位置中查找a 。如果存在这样的文件,它将自动用作应用程序的收藏夹图标。

13. 自定义错误页面

          如果要显示给定状态代码的自定义HTML错误页面,可以将文件添加到文件/error夹。错误页面可以是静态HTML(即添加到任何静态资源文件夹下),也可以使用模板来构建。文件名应为确切的状态代码或系列掩码。

            例如,要映射404到静态HTML文件,您的文件夹结构如下:

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- public/
             +- error/
             |   +- 404.html
             +- <other public assets>

           要5xx使用FreeMarker模板映射所有错误,您的文件夹结构如下:

src/
 +- main/
     +- java/
     |   + <source code>
     +- resources/
         +- templates/
             +- error/
             |   +- 5xx.ftlh
             +- <other templates>

             对于更复杂的映射,还可以添加实现该ErrorViewResolver接口的bean ,如以下示例所示:

public class MyErrorViewResolver implements ErrorViewResolver {

    @Override
    public ModelAndView resolveErrorView(HttpServletRequest request,
            HttpStatus status, Map<String, Object> model) {
        // Use the request or status to optionally return a ModelAndView
        return ...
    }

}

            您还可以使用常规的Spring MVC功能,例如@ExceptionHandler方法@ControllerAdvice。在ErrorController随后拿起任何未处理的异常。

            

       在Spring MVC之外映射错误页面

               对于不使用Spring MVC的应用程序,您可以使用ErrorPageRegistrar接口直接注册ErrorPages。此抽象直接与基础嵌入式servlet容器一起使用,即使您没有Spring MVC也可以使用DispatcherServlet

@Bean
public ErrorPageRegistrar errorPageRegistrar(){
    return new MyErrorPageRegistrar();
}

// ...

private static class MyErrorPageRegistrar implements ErrorPageRegistrar {

    @Override
    public void registerErrorPages(ErrorPageRegistry registry) {
        registry.addErrorPages(new ErrorPage(HttpStatus.BAD_REQUEST, "/400"));
    }

}

14. 跨域支持

            跨域资源共享(CORS)是由大多数浏览器实施的W3C规范,可让您灵活地指定授权哪种类型的跨域请求,而不是使用诸如IFRAME或JSONP之类的安全性较低,功能较弱的方法。

            从spring 4.2版本开始,Spring MVC 支持CORS。在Spring Boot应用程序中使用带有注释的控制器方法CORS配置@CrossOrigin不需要任何特定的配置。 可以通过使用自定义方法注册bean 来定义全局CORS配置,如以下示例所示:WebMvcConfigureraddCorsMappings(CorsRegistry)          

@Configuration(proxyBeanMethods = false)
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**");
            }
        };
    }

15. 自定义嵌入式Servlet容器

          可以使用Spring Environment属性来配置常见的servlet容器设置。通常,您将在application.properties文件中定义属性。  

          常用服务器设置包括:

  • 网络设置:侦听传入HTTP请求的端口(server.port),要绑定到的接口地址server.address,等等。

  • 会话设置:会话是否为持久(server.servlet.session.persistent),会话超时(server.servlet.session.timeout),会话数据位置(server.servlet.session.store-dir)和会话Cookie配置(server.servlet.session.cookie.*)。

  • 错误管理:错误页面的位置(server.error.path)等。

       程序定制

             如果需要以编程方式配置嵌入式servlet容器,则可以注册一个实现该WebServerFactoryCustomizer接口的Spring bean 。 WebServerFactoryCustomizer提供对的访问ConfigurableServletWebServerFactory,其中包括许多自定义设置方法。以下示例显示以编程方式设置端口:

import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;

@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    @Override
    public void customize(ConfigurableServletWebServerFactory server) {
        server.setPort(9000);
    }

}

       直接自定义ConfigurableServletWebServerFactory

            如果前面的定制技术太有限,你可以注册TomcatServletWebServerFactoryJettyServletWebServerFactoryUndertowServletWebServerFactory豆你自己。

@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.setPort(8080);
    factory.setSessionTimeout(10, TimeUnit.MINUTES);
    factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html"));
    return factory;
}

16. 配置数据库

            DataSource配置由中的外部配置属性控制spring.datasource.*。例如,您可以在中声明以下部分application.properties:       

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass

             您至少应通过设置spring.datasource.url属性来指定URL 。否则,Spring Boot会尝试自动配置嵌入式数据库。

             您通常不需要指定driver-class-name,因为Spring Boot可以从推导大多数数据库url

             对于DataSource要创建的池,我们需要能够验证有效的Driver类是否可用,因此我们在进行任何操作之前都要进行检查。换句话说,如果您设置spring.datasource.driver-class-name=com.mysql.jdbc.Driver,则该类必须是可加载的。


17. 使用NoSQL技术

          Spring Data提供了其他项目来帮助您访问各种NoSQL技术,Spring Boot为Redis,MongoDB,Neo4j,Elasticsearch,Solr Cassandra,Couchbase和LDAP提供自动配置。您可以使用其他项目,但必须自己进行配置。请参阅相应的参考文档,位于spring.io/projects/spring-data


18. Reids             

          1). Redis是一个缓存,消息代理和功能丰富的键值存储。Spring Boot为LettuceJedis客户端库以及Spring Data Redis提供的最基本的抽象提供了基本的自动配置。

有一个spring-boot-starter-data-redis“启动器”可以方便地收集依赖关系。默认情况下,它使用Lettuce。该启动程序可以处理传统应用程序和响应式应用程序。

           2). 您可以像插入其他任何Spring Bean一样注入自动配置的RedisConnectionFactoryStringRedisTemplate或Vanilla RedisTemplate实例。默认情况下,实例尝试连接到Redis服务器localhost:6379。下面的清单显示了这种Bean的示例: 

@Component
public class MyBean {

    private StringRedisTemplate template;

    @Autowired
    public MyBean(StringRedisTemplate template) {
        this.template = template;
    }

    // ...

}

19. Solr

           Apache Solr是一个搜索引擎。Spring Boot为Solr 5客户端库提供了基本的自动配置,并由Spring Data Solr在其之上提供了抽象。有一个spring-boot-starter-data-solr“启动器”可以方便地收集依赖关系。

           您可以像插入SolrClient其他任何Spring Bean一样注入自动配置的实例。默认情况下,该实例尝试连接到的服务器localhost:8983/solr。以下示例显示如何注入Solr bean:

@Component
public class MyBean {

    private SolrClient solr;

    @Autowired
    public MyBean(SolrClient solr) {
        this.solr = solr;
    }

    // ...

}

              如果添加自己@Bean的type SolrClient,它将替换默认值。


20. Elasticsearch

           Elasticsearch是一个开源,分布式,RESTful搜索和分析引擎。Spring Boot为Elasticsearch提供了基本的自动配置。


21. 使用调用REST服务

      1).RestTemplate

          如果需要从应用程序调用远程REST服务,则可以使用Spring Framework的RestTemplate类。由于RestTemplate实例通常需要在使用前进行自定义,因此Spring Boot不提供任何单个自动配置的RestTemplatebean。但是,它会自动配置a RestTemplateBuilder,可以RestTemplate在需要时创建实例。自动配置RestTemplateBuilder可确保明智HttpMessageConverters地应用于RestTemplate实例。

         以下代码显示了一个典型示例:        

@Service
public class MyService {

    private final RestTemplate restTemplate;

    public MyService(RestTemplateBuilder restTemplateBuilder) {
        this.restTemplate = restTemplateBuilder.build();
    }

    public Details someRestCall(String name) {
        return this.restTemplate.getForObject("/{name}/details", Details.class, name);
    }

}

    RestTemplateBuilder包括许多有用的方法,可用于快速配置RestTemplate。例如,要添加BASIC身份验证支持,可以使用builder.basicAuthentication("user", "password").build()


        2).WebClient

     WebClient用于调用远程REST服务。与相比RestTemplate,此客户具有更实用的感觉并且完全反应灵敏。您可以在Spring Framework文档WebClient的专用部分中了解有关的更多信息。

     Spring Boot WebClient.Builder为您创建并预配置a ;强烈建议将其注入您的组件中并使用它来创建WebClient实例。       以下代码显示了一个典型示例:

@Service
public class MyService {

    private final WebClient webClient;

    public MyService(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder.baseUrl("https://example.org").build();
    }

    public Mono<Details> someRestCall(String name) {
        return this.webClient.get().uri("/{name}/details", name)
                        .retrieve().bodyToMono(Details.class);
    }

}

22. 发送邮件

      Spring框架提供了一种使用JavaMailSender接口发送电子邮件的简单抽象方法,而Spring Boot为其提供了自动配置以及启动程序模块。

       如果spring.mail.host和相关库(由定义spring-boot-starter-mail)可用,JavaMailSender则如果不存在则创建默认库。可以通过spring.mail名称空间中的配置项进一步自定义发送方。请参阅MailProperties以获取更多详细信息。

特别是,某些默认超时值是无限的,您可能需要更改此值,以避免线程被无响应的邮件服务器阻塞,如以下示例所示:

spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000

           也可以JavaMailSender使用SessionJNDI中的现有配置进行配置

spring.mail.jndi-name=mail/Session

23. JTA的分布式事务

通过使用AtomikosBitronix嵌入式事务管理器,Spring Boot支持跨多个XA资源的分布式JTA事务。部署到合适的Java EE应用程序服务器时,还支持JTA事务。

当检测到JTA环境时,JtaTransactionManager将使用Spring 来管理事务。自动配置的JMS,DataSource和JPA Bean已升级为支持XA事务。您可以使用标准Spring习惯用法(例如@Transactional)来参与分布式事务。如果您在JTA环境中,但仍要使用本地事务,则可以将该spring.jta.enabled属性设置false为禁用JTA自动配置。


24. 任务执行和计划

Executor上下文中没有bean的情况下,Spring Boot会ThreadPoolTaskExecutor使用合理的默认值自动配置a ,这些默认值可以自动与异步任务执行(@EnableAsync)和Spring MVC异步请求处理相关联。

线程池使用8个核心线程,这些线程可以根据负载增长和收缩。可以使用spring.task.execution名称空间对这些默认设置进行微调,如以下示例所示:

spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s

这会将线程池更改为使用有界队列,以便在队列已满(100个任务)时,线程池最多增加到16个线程。池的收缩更加激进,因为当线程空闲10秒(而不是默认情况下的60秒)时,它们将被回收。

ThreadPoolTaskScheduler如果需要与计划的任务执行(@EnableScheduling)关联,也可以自动配置A。线程池默认使用一个线程,可以使用spring.task.scheduling名称空间对这些设置进行微调。

既是TaskExecutorBuilder豆和TaskSchedulerBuilder绿豆可在上下文提供如果自定义遗嘱执行人或调度需要创建。


25. 创建自己的自动配置

  • 1). 了解自动配置的Bean

 在后台,自动配置是通过标准@Configuration类实现的。其他@Conditional注释用于约束何时应应用自动配置。通常,自动配置类使用@ConditionalOnClass@ConditionalOnMissingBean注释。这样可以确保仅当找到相关的类并且尚未声明自己的类时,自动配置才适用@Configuration

  • 2). 查找自动配置候选人

Spring Boot检查META-INF/spring.factories发布的jar中是否存在文件。该文件应在EnableAutoConfiguration键下列出您的配置类,如以下示例所示:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \
com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration
  • 3).条件注释

您几乎总是希望@Conditional在自动配置类中包含一个或多个注释。该@ConditionalOnMissingBean注释是用来让开发者重写自动配置,如果他们不满意自己的缺省值一个常见的例子。

Spring Boot包含许多@Conditional注释,您可以通过注释@Configuration类或单个@Bean方法在自己的代码中重用它们。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java的艺术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值