4.4使用@Enable*注释去切换配置

多数情况下,Spring Boot都是自动去评估路径和探测配置的信息,然后快速获取简单应用。但是,有时候,我们想提供配置类,但是要求不需要Spring Boot去自动发现这个配置是否包含,也就是说,我们想自己判断这个配置的有用性。

  这样的话,我们将修改注释而不是spring.factories的路径。

4.4.1代码实现

1.首先,我们需要注释掉count-starter/src/main/resource/spring.factories文件下的配置。

 #org.springframework.boot.autoconfigure.EnableAutoConfiguration =\
#org.test.bookpubstarter.dbcount.DbCountAutoConfiguration

 

2.接着,我们需要创建注释。我们将会创建一份新的文件,名称是EnableDbCounting.jaa在路径src/main/java/org/owen/bookpubstarter/dbcount下面。

 @Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(DbCountAutoConfiguration.class)
@Documented
public @interface EnableDbCounting {
}

 

3.我们将创建好的标签@EnableDbCounting注释加入到BookPubApplication类中,并且移除掉dbCountRunner(…)方法。

 @SpringBootApplication
@EnableScheduling
@EnableDbCounting
public class BookPubApplication {
public static void main(String[] args) {
SpringApplication.run(BookPubApplication.class, args);
} @
Bean
public StartupRunner schedulerRunner() {
return new StartupRunner();
}
}

 

4.启动项目。

4.4.2代码说明

  执行程序,你将会看到所有打印的总数信息都是0,尽管StartupRunner打印了Number of books:1。具体信息如下:

o.t.b.dbcount.DbCountRunner : AuthorRepository has 0 entries

o.t.b.dbcount.DbCountRunner : BookRepository has 0 entries

o.t.b.dbcount.DbCountRunner : PublisherRepository has 0

entries

o.t.b.dbcount.DbCountRunner : ReviewerRepository has 0 entries

org.test.bookpub.StartupRunner : Welcome to the Book Catalog

System!

org.test.bookpub.StartupRunner : Number of books: 1

  这是因为Spring Boot是随机执行CommandLineRunner,当我们改为了配置@EnableDbCounting注释时,它会有BookPubApplication类之前获取进程。因为数据的初始化是在StartupRunner.run(…)的方法中,但是程序的启动是先去调用DbCountRunner.run(…)的方法,所以打印的信息是0.

  如果我们想要按照顺序来执行,我们可以加入@Order的注释。让我们在StartupRunner类上面加入@Order(Ordered.LOWEST_PRECEDENCE-15).因为加入了LOWESR_PRECENDENCE会确保StartupRunner会被执行之后才执行DbCountRunner.加入之后启动我们的程序,这个时候看到的就不是0的信息了。

  在spring.factories文件中没有了包含的配置信息,Spring Boot并不知道DbCountAutoConfiguration类需要包含在应用的上下文中。在默认的情况下,Spring Boot在启动时,只会去扫描org.owen.bookpub.*下的配置信息。然而,org.owen.bookpub和org.owen.bokpubstarter.dbcount的包路径是不一样的,所以后者是不被扫描的。但是我们新创建了注释,@EnableDbCounting注释中引入了@Import(DbCountAutoConfiguration.class),这样的话就会让Spring Boot去包含DbCountAutoConfiguration作为应用的一部分。

  通过使用注释,spring.factories和确切的bean注释,我人可以灵活地自定义配置Spring Boot的starters在我们的项目中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值