【问题标题】:Spring dblink and invoke trigger on another databaseSpring dblink 并在另一个数据库上调用触发器
【发布时间】:2019-09-19 09:43:18
【问题描述】:

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

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

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

总结一下,我需要什么:

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

【问题讨论】:

  • 我从来没有在春天做过,但是:你不能使用外国数据包装器吗? progress.com/tutorials/jdbc/…
  • 是的,我正在使用它(dblink),但现在我想知道在代码中实现它的最佳方法是什么。

标签: spring postgresql hibernate spring-boot


【解决方案1】:

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

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

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

  3. 现在在您的服务类中,只需对 JdbcTemplate bean 进行自动装配。然后,编写SQL查询以使用此方法获取值queryForList

  4. 在 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
    

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 2019-06-29
    • 1970-01-01
    • 2016-12-27
    • 2015-09-30
    • 2019-03-23
    • 2018-09-06
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多