¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

Múltiples métodos de configuración de springboot

  • La configuración de java se basa principalmente en clases de java y algunas anotaciones. Las anotaciones más utilizadas son:

  • @Configuration: declara una clase como una clase de configuración en lugar del archivo xml

  • @Bean: declare sobre el método, agregue el valor de retorno del método al contenedor Bean en lugar de la etiqueta

  • @Value: tipo básico o inyección de propiedad de cadena

  • @PropertySource: especifique un archivo de propiedades externo

  • A continuación se toma la configuración del grupo de conexiones de Druid como ejemplo, el nombre de la base de datos es springboot_test

método uno

<!--pom.xml -->
<dependency> 
    <groupId>com.alibaba</groupId>              
    <artifactId>druid</artifactId> 
    <version>1.1.6</version> 
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
# src/resources/jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@PropertySource("classpath:jdbc.properties")
public class DruidConfig {
    @Value("${jdbc.url}")
    String url;
    @Value("${jdbc.driverClassName}")
    String driverClassName;
    @Value("${jdbc.username}")
    String username;
    @Value("${jdbc.password}")
    String password;

    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClassName);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}

Interpretación:

  • @Configuration: Declaramos que nuestro DruidConfig es una clase de configuración

  • @PropertySource: la ruta del archivo de propiedades especificado es: classpath: jdbc.properties

  • @Value inyecta un valor para el atributo (solo tipo básico o String)

  • @Bean declara el método dataSource () como un método para registrar un Bean, y Spring llamará automáticamente a este método y agregará el valor de retorno del método al contenedor Spring.

Camino dos

<!--pom.xml -->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.6</version>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <scope>runtime</scope>
</dependency>
<!-- ============不添加在IDEA 会报红,但并不影响功能 ================= -->
<dependency>
     <groupId> org.springframework.boot </groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
     <optional>true</optional>
</dependency>
<!--============================================================== -->
# src/resources/application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
//src\main\java\com\itheima\config\DruidConfig.java
@ConfigurationProperties(prefix = "jdbc")
public class DruidProperties {
    private String url;
    private String driverClassName;
    private String username;
    private String password;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
    @Bean
    public DataSource dataSource(DruidProperties dp) {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(dp.getDriverClassName());
        dataSource.setUrl(dp.getUrl());
        dataSource.setUsername(dp.getUsername());
        dataSource.setPassword(dp.getPassword());
        return dataSource;
    }
}

Interpretación:

  • La anotación @ConfifigurationProperties declara que la clase actual es una clase de lectura de propiedad, y cada propiedad está definida en la clase. El nombre debe ser coherente con la última parte del jdbc. En el archivo de propiedades.

  • @EnableConfigurationProperties () declara la clase de lectura de propiedad que se utilizará. Hay tres métodos de inyección para utilizar esta clase

1. @ Inyección automática

//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
    @Autowired
    private DruidProperties dp;
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        //setter
        return dataSource;
    }
}

2. Inyección de constructor

```
//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationProperties(DruidProperties.class)
public class DruidConfig {
    private DruidProperties dp; 
    public DruidConfig(DruidProperties dp){ this.dp = dp; }
    @Bean
    public DataSource dataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        //setter
        return dataSource;
    }
}

```

3. Como una inyección de parámetro de método de @Bean (usado en este ejemplo)

//src\main\java\com\itheima\config\DruidConfig.java
@Configuration
@EnableConfigurationPerProperties(DruidProperties.class)
public class DruidConfig {
    @Bean
    public DataSource dataSource(DruidProperties dp) {
        DruidDataSource dataSource = new DruidDataSource();
        //setter
        return dataSource;
    }
}

El método 2 resuelve el problema de que @Value no puede leer atributos de objeto (como user.friend.name) a través de la clase de lectura de atributos, pero parece ser más problemático

Método tres (recomendado)

De hecho, si solo se necesita usar un bean para una sección de atributo, no es necesario inyectarlo en una clase.

<!--pom.xml -->
<dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.1.6</version>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
     <scope>runtime</scope>
</dependency>
<!-- ============不添加在IDEA 会报红,但并不影响功能 ================= -->
<dependency>
     <groupId> org.springframework.boot </groupId>
     <artifactId>spring-boot-configuration-processor</artifactId>
     <optional>true</optional>
</dependency>
<!--============================================================== -->
# src/resources/application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bos
jdbc.username=root
jdbc.password=123456
@Configuration
public class DruidConfig {
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}

Camino cuatro

<!--pom.xml -->
<dependency> 
    <groupId>com.alibaba</groupId>              
    <artifactId>druid</artifactId> 
    <version>1.1.6</version> 
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
# src/resources/application.properties
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/bos
spring.datasource.username=root
spring.datasource.password=123456

Pensamiento: ¿Por qué de esta manera no se requieren clases de configuración para leer la información de configuración?

Al iniciar la clase para ejecutar el método principal, verifique el método de construcción SpringApplication y realice el seguimiento de la siguiente manera
¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

Es fácil encontrar que obtiene la información del nombre de la clase de META-INF / spring.factories, la almacena en un mapa de valores múltiples de una tecla, abre spring.factories, comparación de depuración

¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

Se encuentra que la clave es la parte azul del archivo y el valor es la parte verde Mirando hacia atrás, no es difícil encontrar que genera instancias de estas clases adquiridas y las inyecta en el contenedor IOC.

¿Abra DataSourceProperties y descubra que esta no es la segunda forma?
¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

Haga clic en DataSourceProperties.class
¡Dominar estos métodos de configuración de springboot duplicará la eficiencia de su trabajo!

para resumir:

Cuando agregamos la dependencia, DataSourceAutoConfiguration se carga automáticamente cuando se ejecuta la clase de inicio, se lee la clase DataSourceProperties y la información se lee en application.xml de acuerdo con el prefijo predeterminado spring.datasource

Al final

Dominar estos métodos de configuración de springboot hará que sea más fácil para ti lidiar con las cosas en el trabajo. Si crees que el artículo es útil para ti, por favor dame un pulgar hacia arriba. ¡Tu apoyo es la mayor motivación para mi creación!

Supongo que te gusta

Origin blog.51cto.com/14966465/2542899
Recomendado
Clasificación