Tutorial básico de Spring Boot 2.x: configuración de fuente de datos múltiples de JdbcTemplate

En los tutoriales anteriores de esta serie, hemos introducido cómo utilizar los tres métodos de acceso a datos más utilizados:

A continuación, nos dividiremos en tres artículos para presentar las instrucciones de configuración de cómo usar estos tres métodos de acceso a datos cuando necesitamos múltiples fuentes de datos.

Agregar la configuración de múltiples fuentes de datos

Primero application.propertiesconfigure dos configuraciones de base de datos que desea vincular en el archivo de configuración de Spring Boot , como esta:

spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/test1
spring.datasource.primary.username=root
spring.datasource.primary.password=123456
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.secondary.jdbc-url=jdbc:mysql://localhost:3306/test2
spring.datasource.secondary.username=root
spring.datasource.secondary.password=123456
spring.datasource.secondary.driver-class-name=com.mysql.cj.jdbc.Driver

Descripción y nota :

  1. Al configurar varias fuentes de datos, la diferencia con una única fuente de datos es que spring.datasourcedespués de configurar un nombre de fuente de datos primaryy secondarydistinguir diferentes configuraciones de fuentes de datos, este prefijo se utilizará en la inicialización posterior de las fuentes de datos.
  2. Conexión de origen de datos de configuración y 2.x 1.x configuración de los elementos son diferentes: el uso 2.x spring.datasource.secondary.jdbc-url, y la versión 1.x uso spring.datasource.secondary.url. Si este error ocurre durante la configuración java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName., entonces es un problema con este elemento de configuración.

Lectura relacionada: Tutorial básico de Spring Boot 1.x: configuración de múltiples fuentes de datos

Inicializar la fuente de datos y JdbcTemplate

Después de completar la información de configuración para múltiples fuentes de datos, cree una clase de configuración para cargar la información de configuración, inicializar la fuente de datos e inicializar la JdbcTemplate utilizada por cada fuente de datos. ¡Solo necesita agregar la siguiente clase de configuración en su aplicación Spring Boot para completar!

@Configuration
public class DataSourceConfiguration {
    
    

    @Primary
    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
    
    
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource secondaryDataSource() {
    
    
        return DataSourceBuilder.create().build();
    }

    @Bean
    public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource primaryDataSource) {
    
    
        return new JdbcTemplate(primaryDataSource);
    }

    @Bean
    public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource secondaryDataSource) {
    
    
        return new JdbcTemplate(secondaryDataSource);
    }

}

Descripción y nota :

  1. Los dos primeros Beans son la creación de fuentes de datos, y @ConfigurationPropertiespuede saber que estas dos fuentes de datos se han cargado spring.datasource.primary.*y spring.datasource.secondary.*configurado respectivamente .
  2. @PrimaryLa anotación especifica la fuente de datos principal, es decir, cuando no especificamos qué fuente de datos, se utilizará este Bean
  3. Los dos últimos Beans corresponden a cada fuente de datos JdbcTemplate. Puede ver que JdbcTemplatecuando se crearon estos dos , la primaryDataSourcefuente de datos y la secondaryDataSourcefuente de datos se inyectaron respectivamente

tener una prueba

Después de completar lo anterior, podemos escribir una clase de prueba para probar si la configuración de múltiples fuentes de datos anterior es correcta, como la siguiente:

@RunWith(SpringRunner.class)
@SpringBootTest
public class Chapter37ApplicationTests {
    
    

    @Autowired
    protected JdbcTemplate primaryJdbcTemplate;

    @Autowired
    protected JdbcTemplate secondaryJdbcTemplate;

    @Before
    public void setUp() {
    
    
        primaryJdbcTemplate.update("DELETE  FROM  USER ");
        secondaryJdbcTemplate.update("DELETE  FROM  USER ");
    }

    @Test
    public void test() throws Exception {
    
    
        // 往第一个数据源中插入 2 条数据
        primaryJdbcTemplate.update("insert into user(name,age) values(?, ?)", "aaa", 20);
        primaryJdbcTemplate.update("insert into user(name,age) values(?, ?)", "bbb", 30);

        // 往第二个数据源中插入 1 条数据,若插入的是第一个数据源,则会主键冲突报错
        secondaryJdbcTemplate.update("insert into user(name,age) values(?, ?)", "ccc", 20);

        // 查一下第一个数据源中是否有 2 条数据,验证插入是否成功
        Assert.assertEquals("2", primaryJdbcTemplate.queryForObject("select count(1) from user", String.class));

        // 查一下第一个数据源中是否有 1 条数据,验证插入是否成功
        Assert.assertEquals("1", secondaryJdbcTemplate.queryForObject("select count(1) from user", String.class));
    }

}

Descripción y nota :

  1. Puede preguntar aquí, hay dos JdbcTemplate, ¿por qué no @Qualifierespecificar? Por cierto, aquí hay un pequeño punto de conocimiento: cuando no lo especificamos, se usará el nombre del parámetro para encontrar el Bean y, si existe, se inyectará.
  2. Cuando se crearon las dos JdbcTemplates, no especificamos los nombres ¿Cómo coinciden? Este es también un pequeño punto de conocimiento.Cuando creamos un Bean, el nombre del método se usará como el nombre del Bean por defecto, así que aquí está la correspondencia. Los lectores pueden querer mirar hacia atrás para ver si los dos nombres son iguales.

Ejemplo de código

Para ver ejemplos relacionados en este artículo, puede ver los chapter3-7directorios en el siguiente almacén :

  • Github: https: //github.com/dyc87112/SpringBoot-Learning/
  • Gitee: https: //gitee.com/didispace/SpringBoot-Learning/

Si cree que este artículo es bueno, bienvenido al soporte de Star, ¡su atención es mi motivación para perseverar!

Este artículo se publicó por primera vez en: Spring Boot 2.x Tutorial básico: Configuración de fuente de datos múltiples de JdbcTemplate, indique la fuente para la reimpresión. ¡Esta serie de contenido temático puede hacer clic en aprendizaje gratuito !

Supongo que te gusta

Origin blog.csdn.net/dyc87112/article/details/106891180
Recomendado
Clasificación