Solución:
Tuve un problema similar. Mi solución tenía que poner mis repositorios en 2 paquetes separados, según la respuesta de Chris Savory, y luego definir 2 clases de @Configuration que definen 1 JdbcOperation cada una. Aquí está mi configuración completa (tengo un servidor SQL y una fuente de datos H2):
application.properties
Tenga en cuenta que estas propiedades son específicas de Hikari CP. El kilometraje puede variar si elige un CP diferente (es decir, Tomcat)
## SQL SERVER DATA SOURCE
spring.sql-server-ds.jdbcUrl= jdbc:sqlserver://localhost:1554;databaseName=TestDB
spring.sql-server-ds.username= uteappl
spring.sql-server-ds.password= mypassword
## H2 DATA SOURCE
spring.h2-ds.jdbcUrl= jdbc:h2:mem:testdb;mode=MySQL
spring.h2-ds.username= sa
spring.h2-ds.password= password
Primera configuración H2 @
@Configuration
@EnableJdbcRepositories(jdbcOperationsRef = "h2JdbcOperations", basePackages = "com.twinkie.repository.h2")
public class H2JdbcConfiguration extends AbstractJdbcConfiguration {
@Bean
@ConfigurationProperties(prefix = "spring.h2-ds")
public DataSource h2DataSource() {
return DataSourceBuilder.create().build();
}
@Bean
NamedParameterJdbcOperations h2JdbcOperations(@Qualifier("h2DataSource") DataSource sqlServerDs) {
return new NamedParameterJdbcTemplate(sqlServerDs);
}
@Bean
public DataSourceInitializer h2DataSourceInitializer(
@Qualifier("h2DataSource") final DataSource dataSource) {
ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator(
new ClassPathResource("schema.sql"));
DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();
dataSourceInitializer.setDataSource(dataSource);
dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);
return dataSourceInitializer;
}
}
Segundo SQL Server @Configuration
@Configuration
@EnableJdbcRepositories("com.twinkie.repository.sqlserver")
public class SqlServerJdbcConfiguration {
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.sql-server-ds")
public DataSource sqlServerDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Primary
NamedParameterJdbcOperations jdbcOperations(
@Qualifier("sqlServerDataSource") DataSource sqlServerDs) {
return new NamedParameterJdbcTemplate(sqlServerDs);
}
}
Luego tengo mis repositorios (tenga en cuenta los diferentes paquetes).
servidor SQL
package com.twinkie.repository.sqlserver;
import com.twinkie.model.SoggettoAnag;
import java.util.List;
import org.springframework.data.jdbc.repository.query.Query;
import org.springframework.data.repository.CrudRepository;
public interface SoggettoAnagRepository extends CrudRepository<SoggettoAnag, Long> {
@Query("SELECT * FROM LLA_SOGGETTO_ANAG WHERE sys_timestamp > :sysTimestamp ORDER BY sys_timestamp ASC")
List<SoggettoAnag> findBySysTimestampGreaterThan(Long sysTimestamp);
}
H2
package com.twinkie.repository.h2;
import com.twinkie.model.GlSync;
import java.util.Optional;
import org.springframework.data.jdbc.repository.query.Modifying;
import org.springframework.data.jdbc.repository.query.Query;
import org.springframework.data.repository.Repository;
public interface GlSyncRepository extends Repository<GlSync, String> {
@Modifying
@Query("INSERT INTO GL_SYNC (table_name, last_rowversion) VALUES (:tableName, :rowVersion) ON DUPLICATE KEY UPDATE last_rowversion = :rowVersion")
boolean save(String tableName, Long rowVersion);
@Query("SELECT table_name, last_rowversion FROM gl_sync WHERE table_name = :tableName")
Optional<GlSync> findById(String tableName);
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)