您好,我想问您有关在Spring + Hibernate中连接另一个数据库的推荐解决方案。
对于我来说,我的数据库有一个小型应用程序,我需要做的是从另一个(大)数据库中获取一些数据。 目前,我正在使用postgresql和 dblink 进行此操作,但是现在最好将此查询移到代码中。 在不久的将来,我还需要在该数据库上调用触发器。
那么问题是解决这种连接问题的最佳实践是什么?
总结一下,我需要什么:
答案 0 :(得分:0)
您可以尝试从Spring Boot应用程序中调用另一个数据库。因此,您的基本应用程序将使用MySQL,辅助数据库将为Postgres。
如果您使用的是spring-boot
,请在项目文件夹下创建lib
文件夹(与src
相同的层次结构)。在该文件夹中添加所需的jdbc
jar。
然后,使用@Configuration
创建DataBaseConfig类,在该类中创建ComboPooledDataSource
和JdbcTemplate
bean。
现在,在您的服务类中只需对该JdbcTemplate bean进行自动装配。然后,使用此方法queryForList
在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