Spring dblink并在另一个数据库上调用触发器

时间:2019-09-19 09:43:18

标签: spring postgresql hibernate spring-boot

您好,我想问您有关在Spring + Hibernate中连接另一个数据库的推荐解决方案。

对于我来说,我的数据库有一个小型应用程序,我需要做的是从另一个(大)数据库中获取一些数据。 目前,我正在使用postgresql和 dblink 进行此操作,但是现在最好将此查询移到代码中。 在不久的将来,我还需要在该数据库上调用触发器。

那么问题是解决这种连接问题的最佳实践是什么?

总结一下,我需要什么:

  • 调用另一个数据库触发器
  • 调用dblink并从另一个数据库获取数据

1 个答案:

答案 0 :(得分:0)

您可以尝试从Spring Boot应用程序中调用另一个数据库。因此,您的基本应用程序将使用MySQL,辅助数据库将为Postgres。

  1. 如果您使用的是spring-boot,请在项目文件夹下创建lib文件夹(与src相同的层次结构)。在该文件夹中添加所需的jdbc jar。

  2. 然后,使用@Configuration创建DataBaseConfig类,在该类中创建ComboPooledDataSourceJdbcTemplate bean。

  3. 现在,在您的服务类中只需对该JdbcTemplate bean进行自动装配。然后,使用此方法queryForList

  4. 编写SQL查询以获取价值
  5. 在pom.xml中,您可以像下面那样映射该外部jar文件

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>db2jcc</artifactId>
        <version>11.1</version>
        <scope>system</scope>
        <systemPath>${project.basedir}/lib/mysql.jar</systemPath>
    </dependency>
    
    
    @Configuration
    public class DatabaseConfig {
    
    @Bean(name = "employeeDataBase")
    @ConfigurationProperties(prefix = "employee.datasource")
    public ComboPooledDataSource employeeDataSource() {
        return new ComboPooledDataSource();
    }
    
    @Bean(name = "employeeTemplate")
    public JdbcTemplate employeeTemplate(@Qualifier("employeeDataBase") DataSource ds) {
        return new JdbcTemplate(ds);
    }
    }
    
    @Service
    public class EmployeeService {
    
    @Autowired
    @Qualifier("employeeTemplate")
    JdbcTemplate employeeTemplate;
    
    public void getEmployeeFromExternalDB() {
        List<Map<String, Object>> maps = employeeTemplate.queryForList("SELECT * FROM EMPLOYEE");
    }
    }
    
    //application.properties
    employee.datasource.jdbc-url=${EMPLOYEE_URL}
    employee.datasource.user=${EMPLOYEE_UNAME}
    employee.datasource.password=${EMPLOYEE_PWD}
    employee.datasource.driver-class=com.edb.Driver
    employee.datasource.max-idle-time=6
    employee.datasource.min-pool-size=3
    employee.datasource.max-pool-size=15
    employee.datasource.jdbcUrl=${EMPLOYEE_URL}
    employee.datasource.driver-class-name=com.edb.Driver