package com.sigem.gis.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; import java.util.HashMap; @Configuration public class DataSourceConfig { // --- DataSource 1: Master (.254) --- @Bean @Primary @ConfigurationProperties("spring.datasource.master") public org.springframework.boot.autoconfigure.jdbc.DataSourceProperties masterDataSourceProperties() { return new org.springframework.boot.autoconfigure.jdbc.DataSourceProperties(); } @Bean(name = "masterDataSource") @Primary public DataSource masterDataSource() { return masterDataSourceProperties().initializeDataSourceBuilder().build(); } // --- DataSource 2: GIS (.123) --- @Bean @ConfigurationProperties("spring.datasource.gis") public org.springframework.boot.autoconfigure.jdbc.DataSourceProperties gisDataSourceProperties() { return new org.springframework.boot.autoconfigure.jdbc.DataSourceProperties(); } @Bean(name = "gisDataSource") public DataSource gisDataSource() { return gisDataSourceProperties().initializeDataSourceBuilder().build(); } // --- JdbcTemplates --- @Primary @Bean(name = "masterJdbcTemplate") public JdbcTemplate masterJdbcTemplate(@Qualifier("masterDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } @Bean(name = "gisJdbcTemplate") public JdbcTemplate gisJdbcTemplate(@Qualifier("gisDataSource") DataSource dataSource) { return new JdbcTemplate(dataSource); } // --- Configuración Explícita de JPA --- @Primary @Bean(name = "entityManagerFactory") public LocalContainerEntityManagerFactoryBean entityManagerFactory( @Qualifier("masterDataSource") DataSource dataSource) { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource); em.setPackagesToScan("com.sigem.gis"); em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); HashMap properties = new HashMap<>(); properties.put("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect"); em.setJpaPropertyMap(properties); return em; } @Primary @Bean(name = "transactionManager") public PlatformTransactionManager transactionManager( @Qualifier("entityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactory) { return new JpaTransactionManager(entityManagerFactory.getObject()); } }