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.properties
configure 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 :
- Al configurar varias fuentes de datos, la diferencia con una única fuente de datos es que
spring.datasource
después de configurar un nombre de fuente de datosprimary
ysecondary
distinguir diferentes configuraciones de fuentes de datos, este prefijo se utilizará en la inicialización posterior de las fuentes de datos. - 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 usospring.datasource.secondary.url
. Si este error ocurre durante la configuraciónjava.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 :
- Los dos primeros Beans son la creación de fuentes de datos, y
@ConfigurationProperties
puede saber que estas dos fuentes de datos se han cargadospring.datasource.primary.*
yspring.datasource.secondary.*
configurado respectivamente . @Primary
La anotación especifica la fuente de datos principal, es decir, cuando no especificamos qué fuente de datos, se utilizará este Bean- Los dos últimos Beans corresponden a cada fuente de datos
JdbcTemplate
. Puede ver queJdbcTemplate
cuando se crearon estos dos , laprimaryDataSource
fuente de datos y lasecondaryDataSource
fuente 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 :
- Puede preguntar aquí, hay dos JdbcTemplate, ¿por qué no
@Qualifier
especificar? 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á. - 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-7
directorios 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 !