SpringBoot启动配置类(二)【@Configuration注解的配置类如何被加载到?】

spring容器在启动的时候会去扫描@Configuration,并将相关的类进行加载。那么spring容器怎么去扫描的呢?

配置类与启动类同包或者在其子包下

springboot配置数据库连接池

@Configuration
public class DruidConfig {

    //跟配置文件绑定
    //spring.druid.xx xx跟DruidDataSource里的属性绑定
    @ConfigurationProperties(prefix = "spring.druid")
    //spring容器启动时,DruidDataSource调用内部init方法启动,关闭时,调用内部close方法关闭
    @Bean(initMethod = "init",destroyMethod = "close")
    public DruidDataSource dataSource(){
        DruidDataSource dataSource=new DruidDataSource();
        dataSource.setProxyFilters(Lists.newArrayList(statFilter()));
        return dataSource;
    }

    /**
     * 定义慢sql的Filter,出现慢sql可以打印出来
     * @return
     */
    @Bean
    public Filter statFilter(){
        StatFilter statFilter=new StatFilter();
        //设定多长时间属于慢SQL  这里设置为5秒属于慢SQL
        statFilter.setSlowSqlMillis(5000);
        //设置是否打印慢SQL日志
        statFilter.setLogSlowSql(true);
        //是否将日志合并
        statFilter.setMergeSql(true);
        return statFilter;
    }

    /**
     * 添加监控bean 用来监控慢SQL日志等等
     * 服务启动后,输入地址:http://localhost:8080/druid/index.html查看监控
     * 如果存在慢SQL,则控制台会打印出来
     * 例如:slow sql 21 millis. select id,name,phone,email from user[]
     * @return
     */
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        return new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

如果DruidConfig所在包名为:com.ft.abc.xx,而启动类所在包名为:com.ft.abc,那么满足spring的扫描条件,配置被成功加载。如果不满足包名条件的情况下,还想让配置类加载成功,该怎么办?看下一种方式。

spring.factories文件的配置

在resources目录下新建META-INF目录,并在该目录下创建spring.factories文件。spring.factories文件内容如下:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.ft.xx.config.DruidConfig
  • 1
  • 2

第一行是spring自动配置的路径,第二行是我们自己要指定加载配置类的路径。
这样的话,spring也会去找到该配置类,并且加载它。

自定义注解指定配置类

假设前两种都不用,那么可以自定义一个注解,并将注解加到启动类中,也能达到目的。
自定义注解如下:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(DruidConfig.class)
public @interface EnableDruidConfig {

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这个注解里已经将DruidConfig配置类引入了。
启动类加上该注解:

@SpringBootApplication
@EnableDruidConfig
public class HourseApplication {

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

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

启动spring容器,配置类加载成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值