自动配置2

Posted zqlmianshi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动配置2相关的知识,希望对你有一定的参考价值。

springboot是怎么实现自动配置的呢?通过什么方法开启这个功能呢?

Spring Boot实现自动配置的核心是使用了Spring框架的条件注解和Spring Boot提供的自动配置类。条件注解可以根据特定的条件来决定某个Bean是否需要被创建,而自动配置类则提供了一种默认的配置方案,当某个Bean不存在时,Spring Boot会尝试根据默认的配置方案自动创建这个Bean。

Spring Boot内置了很多自动配置类,比如DataSourceAutoConfiguration、JdbcTemplateAutoConfiguration等,这些自动配置类都有一个@EnableXXX注解与之对应,通过在Application类上加上这个注解,就可以开启对应的自动配置。例如,如果需要开启DataSourceAutoConfiguration,可以在Application类上加上@EnableAutoConfiguration注解或@EnableDataSourceAutoConfiguration注解。

@EnableAutoConfiguration注解是一个元注解,它包含了一些常用的自动配置注解,比如自动配置数据源、Web、JPA等。如果只需要开启某个自动配置,可以使用相应的注解,比如@EnableDataSourceAutoConfiguration注解就只会开启数据源的自动配置。

需要注意的是,有时候Spring Boot的自动配置可能会与我们的实际需求不符,此时我们可以通过配置exclude属性来禁用某个自动配置类。例如,如果我们不需要使用数据源,可以在Application类上使用@EnableAutoConfiguration注解,并在exclude属性中指定DataSourceAutoConfiguration.class来禁用数据源的自动配置。

总之,Spring Boot的自动配置功能可以让我们更加方便地使用Spring框架和第三方库,减少了很多繁琐的配置工作,提高了开发效率。


如果不用自动配置怎么初始化数据库的Connection ?

如果不使用Spring Boot的自动配置,可以手动初始化数据库的Connection。具体步骤如下:

1、加载数据库驱动类

Class.forName("com.mysql.jdbc.Driver");

2、创建数据库连接

String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);

3、执行SQL语句

String sql = "SELECT * FROM user";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()) 
    // 处理查询结果

4、关闭连接

rs.close();
stmt.close();
conn.close();

需要注意的是,手动初始化数据库连接需要自己管理连接的生命周期和错误处理,相对来说比较繁琐,而且不利于代码的维护和扩展。因此,在实际开发中,使用Spring Boot的自动配置可以大大简化数据库连接的初始化过程。

手动初始化数据库连接怎么自己管理连接的生命周期和错误处理?

手动初始化数据库连接需要自己管理连接的生命周期和错误处理,具体步骤如下:

1、手动关闭连接
手动关闭连接可以通过在finally语句块中关闭连接来实现,确保连接在使用完毕后被关闭,避免资源泄露。

2、异常处理
在使用数据库连接时,可能会出现各种异常,例如数据库连接超时、SQL语句错误等。在这种情况下,需要对异常进行捕获和处理,避免程序崩溃或者出现严重错误。

一般来说,可以使用try-catch语句块来捕获异常,然后根据具体情况进行处理。例如,可以打印异常信息、记录日志、回滚事务等。

try 
    // 执行SQL语句
 catch (SQLException e) 
    // 异常处理
    e.printStackTrace();
 finally 
    // 关闭连接

3、连接池
为了更好地管理连接的生命周期和避免频繁地创建和关闭连接,可以使用连接池来管理数据库连接。连接池会在初始化时创建一定数量的连接,并在需要时从连接池中获取连接,使用完毕后将连接归还到连接池中。这样可以避免频繁地创建和关闭连接,提高程序的性能和稳定性。

常用的连接池有Apache Commons DBCP、C3P0、Druid等。在使用连接池时,需要在配置文件中配置连接池的参数,例如最大连接数、最小连接数、最大等待时间等。同时,需要在代码中获取连接池中的连接,使用完毕后将连接归还到连接池中。

// 初始化连接池
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("root");
dataSource.setMaxPoolSize(10);
dataSource.setMinPoolSize(5);

// 获取连接
Connection conn = dataSource.getConnection();

// 执行SQL语句

// 归还连接
conn.close();

自动配置之后怎么管理连接的生命周期和错误处理?


自动配置的数据库连接池一般会自动管理连接的生命周期和错误处理,不需要手动处理。具体来说,自动配置的数据库连接池会在需要时自动创建连接,并在使用完毕后自动将连接归还到连接池中。同时,连接池也会自动处理连接超时、连接异常等情况,并进行相应的重试和错误处理。

一般来说,自动配置的数据库连接池具有以下特点:

1、连接池的配置参数可以在配置文件中进行修改,例如最大连接数、最小连接数、最大等待时间等。

2、连接池会定期检查连接的可用性,并自动回收不可用的连接。

3、当连接池中没有可用的连接时,会自动等待一段时间,直到有连接归还到连接池中或者达到最大等待时间。

4、连接池会自动处理连接异常、连接超时、SQL语句错误等情况,并进行相应的重试和错误处理。

因此,使用自动配置的数据库连接池可以大大简化连接的管理和错误处理。在使用连接时,只需要从连接池中获取连接,使用完毕后将连接归还到连接池中即可。同时,需要注意不要手动关闭连接,否则会导致连接池无法管理连接的生命周期和错误处理。

RabbitAutoConfiguration自动配置详解

参考技术A @ConditionalOnClass 判断类路径中存在 RabbitTemplate 类和 Channel 类
@EnableConfigurationProperties 导入rabbitmq的配置类,具体就是在application.properties中的配置
@Import 导入 RabbitAnnotationDrivenConfiguration 类,见下文2.0的分析

类图如下:

这里比较简单,就是判断bean不存在,就注册为bean到spring容器中

1.3.1 注入连接工厂
1.3.2 注入消息转换器

会判断当前环境中是否存在自定义消息转换器的实现
自定义实现例子为:

1.3.3 重试策略的设置

工厂类与实体类的类图

以上是关于自动配置2的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之HttpEncodingAutoConfiguration自动配置类

2.1自动化装配bean

springboot自动配置源码解读以及jdbc和redis配置原理小点

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之CacheAutoConfiguration自动配置类

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之CacheAutoConfiguration自动配置类

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之AopAutoConfiguration自动配置类