Análisis de la fuente de datos springboot

Análisis de DataSourceAutoConfiguration


SpringBoot tiene una configuración automática DataSourceAutoConfiguration para encontrar la clase de configuración DataSourceAutoConfiguration para el archivo de configuración de fuente de datos /META-INF/spring.factories
.

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({
    
     DataSource.class, EmbeddedDatabaseType.class })
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({
    
     DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })

Bajo springboot, solo el tipo EmbeddedDatabaseType es popular, lo que indica que no hay una introducción de dependencia relacionada, y pertenece a la dependencia spring-jdbc, luego agregue (copiado de spring-boot-starter-data-jdbc)

<dependency>
  <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.1.RELEASE</version>
    <scope>compile</scope>
</dependency>

En este momento, reinicie el proyecto y descubra que ya existe org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration en el contenedor, es decir, DataSourceAutoConfiguration surte efecto en este momento, pero solo la clase DataSourceAutoConfiguration se inyecta en el Contenedor Para configurar automáticamente la fuente de datos, EmbeddedDatabaseConfiguration
o PooledDataSourceConfiguration también deben tener efecto

Cuando se introducen las siguientes dependencias, spring-jdb se puede eliminar porque las dependencias spring-jdb se introducen en spring-boot-starter-data-jdbc

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

DataSourceAutoConfiguration activará la configuración automática. Consulte el portal
cuando la configuración surta efecto.

Digresión La diferencia entre spring-boot-starter-jdbc y spring-boot-starter-data-jdbc
1. Encontrará que spring-boot-starter-data-jdbc depende de spring-boot-starter-jdbc y spring-data- jdbc
y spring-data-jdbc introducen spring-data-commons, donde la interfaz CrudRepository proporciona adición, eliminación, modificación y consulta básicas, y esta interfaz está en spring-data-commons.

2. La fuente de datos predeterminada de springboot es HikariDataSource y HikariCP depende de spring-boot-starter-jdbc. Dependencias
utilizadas en las pruebas anteriores

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jdbc</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
    </dependencies>

Clase de prueba MyBatisPlusBootMain

@SpringBootApplication
public class MyBatisPlusBootMain implements CommandLineRunner, ApplicationContextAware {
    
    

    Logger logger = LoggerFactory.getLogger(MyBatisPlusBootMain.class);

    @Autowired(required = false)
    DataSource dataSource;

    private  ApplicationContext applicationContext;

    public static void main(String[] args) {
    
    
        ApplicationContext run = SpringApplication.run(MyBatisPlusBootMain.class, args);
        UsersEntity user01 = run.getBean("user01", UsersEntity.class);
        System.out.println(user01);
        DataSourceAutoConfiguration dataSourceAutoConfiguration = run.getBean("org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration", DataSourceAutoConfiguration.class);
        System.out.println(dataSourceAutoConfiguration);
    }

    @Override
    public void run(String... args) throws Exception {
    
    
        System.out.println(">>>>>>>>>>>>>>>>>服务启动执行");
        showConnection();
        showIOCBean();
    }

    private void showIOCBean() {
    
    
        String[] names = this.applicationContext.getBeanDefinitionNames();
        for (int i = 0; i < names.length; i++) {
    
    
            System.out.println(names[i]);
        }
    }

    private void showConnection() throws SQLException {
    
    

        logger.info("dataSource:{}", dataSource.getClass().getName());
        Connection connection = dataSource.getConnection();
        logger.info("connection:{}", connection.toString());
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    
    
        this.applicationContext=applicationContext;
    }
}

yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 3306

Reemplace la fuente de datos predeterminada con DruidDataSource

Referencia: Portal

método uno:

agregar dependencias

<dependency>
          <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.1.23</version>
</dependency>

yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/bms_test
    username: root
    password: 3306
    type: com.alibaba.druid.pool.DruidDataSource

En este punto, la fuente de datos se cambia a DruidDataSource

Método dos:

1. Agregue la dependencia de druida
2. Cree el bean de DataSource y devuelva DruidDataSource después de la configuración relacionada

@Bean
    public DataSource dataSource() {
    
    
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("jdbc:mysql://localhost:3306/bms_test");
        dataSource.setUsername("root");
        dataSource.setPassword("3306");
        return dataSource;
    }

Configuración de múltiples fuentes de datos

Supongo que te gusta

Origin blog.csdn.net/qq_43566782/article/details/128462597
Recomendado
Clasificación