Saltar al contenido

¿Cómo ejecutar scripts SQL y obtener datos sobre el inicio de la aplicación?

Necesitamos tu apoyo para compartir nuestras secciones referente a las ciencias de la computación.

Solución:

Por defecto, Spring-Boot carga data.sql y/o data-$platform.sql.

Sin embargo, tenga en cuenta que el script se cargaría en cada inicio, por lo que creo que tiene más sentido (al menos para la producción), tener los valores ya presentes en la base de datos, no reinsertados en cada inicio. Personalmente, solo he usado la inicialización de la base de datos con fines de prueba/desarrollo cuando uso una base de datos de memoria. Aún así, esta es la característica proporcionada por Spring-Boot.

fuente: spring-boot-howto-base de datos-inicialización:

Spring JDBC tiene una función de inicializador de fuente de datos. Spring Boot lo habilita de forma predeterminada y carga SQL desde las ubicaciones estándar schema.sql y data.sql (en la raíz de classpath). Además, Spring Boot cargará los archivos schema-$platform.sql y data-$platform.sql (si están presentes).

src/principal/recursos/datos-oracle.sql:

insert into...
insert into...
  • Puede definir la plataforma con: spring.datasource.platform=oracle.
  • Puede cambiar el nombre del script sql para cargar con: spring.datasource.data=myscript.sql.
  • Junto con data.sqlSpring-boot también carga schema.sql (antes de data.sql).
  • También podría tener una lógica de “actualizar o insertar” en su data.sql: Oracle sql: actualizar si existe otra inserción

Lo que funcionó para mí es usar DataSourceInitializer:

@Bean
public DataSourceInitializer dataSourceInitializer(@Qualifier("dataSource") final DataSource dataSource) 
    ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();
    resourceDatabasePopulator.addScript(new ClassPathResource("/data.sql"));
    DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
    dataSourceInitializer.setDataSource(dataSource);
    dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
    return dataSourceInitializer;

Se utiliza para configurar una base de datos durante la inicialización y limpiar una base de datos durante la destrucción.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/init/DataSourceInitializer.html

Si desea cargar datos del script sql después del inicio, use el objeto de clase ResourceDatabasePopulator de la siguiente manera.

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;

import javax.sql.DataSource;

@Component
public class InitializeData 

    @AutoWired
    private DataSource dataSource;

    @EventListener(ApplicationReadyEvent.class)
    public void loadData() 
            ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(false, false, "UTF-8", new ClassPathResource("data.sql"));
        resourceDatabasePopulator.execute(dataSource);
    

Cargará fácilmente datos del archivo sql y no se preocupe por las declaraciones sql incorrectas dentro del archivo sql, ya que se ignorarán.

Valoraciones y comentarios

No se te olvide comunicar este escrito si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *