Análise da fonte de dados springboot

Análise DataSourceAutoConfiguration


O SpringBoot tem uma configuração automática DataSourceAutoConfiguration para encontrar a classe de configuração DataSourceAutoConfiguration para o arquivo /META-INF/spring.factories de configuração da fonte de dados
.

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

No springboot, apenas o tipo EmbeddedDatabaseType é popular, indicando que não há introdução de dependência relacionada e pertence à dependência spring-jdbc e, em seguida, adicione (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>

Neste momento, reinicie o projeto e verifique se já existe org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration no container, ou seja, DataSourceAutoConfiguration entra em vigor neste momento, mas é apenas a classe DataSourceAutoConfiguration que é injetada no contêiner. Para configurar automaticamente a fonte de dados, EmbeddedDatabaseConfiguration
ou PooledDataSourceConfiguration também precisa entrar em vigor

Quando as seguintes dependências são introduzidas, spring-jdb pode ser removido porque as dependências spring-jdb são introduzidas em spring-boot-starter-data-jdbc

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

DataSourceAutoConfiguration acionará a configuração automática. Consulte o portal
quando a configuração entrar em vigor.

Digressão A diferença entre spring-boot-starter-jdbc e spring-boot-starter-data-jdbc
1. Você descobrirá que spring-boot-starter-data-jdbc depende de spring-boot-starter-jdbc e spring-data- jdbc
e spring-data-jdbc apresentam spring-data-commons, onde a interface CrudRepository fornece adição, exclusão, modificação e consulta básicas, e essa interface está em spring-data-commons.

2. A fonte de dados padrão de springboot é HikariDataSource, e HikariCP depende de spring-boot-starter-jdbc. Dependências
usadas nos testes acima

<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>

Classe de teste 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

Substitua a fonte de dados padrão por DruidDataSource

Ref: Portal

método um:

adicionar dependências

<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

Neste ponto, a fonte de dados é alterada para DruidDataSource

Método dois:

1. Adicionar dependência druid
2. Criar o bean de DataSource e retornar DruidDataSource após a configuração 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;
    }

Configuração de várias fontes de dados

Acho que você gosta

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