SpringBoot启动配置类(二)【@Configuration注解的配置类如何被加载到?】
spring容器在启动的时候会去扫描@Configuration,并将相关的类进行加载。那么spring容器怎么去扫描的呢?配置类与启动类同包或者在其子包下springboot配置数据库连接池@Configurationpublic class DruidConfig {//跟配置文件绑定//spring.druid.xx xx跟DruidDataSource里的属性...
·
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/*");
}
}
如果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
第一行是spring自动配置的路径,第二行是我们自己要指定加载配置类的路径。
这样的话,spring也会去找到该配置类,并且加载它。
自定义注解指定配置类
假设前两种都不用,那么可以自定义一个注解,并将注解加到启动类中,也能达到目的。
自定义注解如下:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(DruidConfig.class)
public @interface EnableDruidConfig {
}
这个注解里已经将DruidConfig配置类引入了。
启动类加上该注解:
@SpringBootApplication
@EnableDruidConfig
public class HourseApplication {
public static void main(String[] args) {
SpringApplication.run(HourseApplication.class, args);
}
}
启动spring容器,配置类加载成功!
更多推荐
已为社区贡献3条内容
所有评论(0)