使用 Encryptionutils 的可配置数据源对象

问题描述 投票:0回答:1

我正在微服务中通过以下方式创建数据源对象:

@Autowired
private EncryptionUtil encryptionutils;

public ComboPooledDataSource appDataSource() throws PropertyVetoException {
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        DatasourceDto datasourceDto = null;
        try {
            datasourceDto = encryptionutils.getDbCredentials("servicename", "oracle", env.getProperty("env"));
        } catch (FileNotFoundException e) {
            log.info().logException("Exception",e);
        }
        if (datasourceDto == null || StringUtils.isEmpty(datasourceDto.getPassword()) || StringUtils
                .isEmpty(datasourceDto.getHost()) || StringUtils.isEmpty(datasourceDto.getUsername())) {
            throw new DBDetailsNotFoundException("Failed to get db credentials");
        }
        dataSource.setDriverClass(dataSourceProperties.getDriverClassName());
        dataSource.setJdbcUrl(datasourceDto.getHost());
        dataSource.setUser(datasourceDto.getUsername());
        dataSource.setPassword(datasourceDto.getPassword());
        configureConnectionPool(dataSource);
        return dataSource;
}

此代码是微服务的一部分,并且运行良好。 现在,我需要从该微服务中分离出所有数据库配置,并创建一个独立的数据库服务,该服务稍后将被微服务和其他微服务用作 jar。

这实际上是从一个 Secrets yml 文件中读取数据库信息,该文件具有基于如下层次结构的 Oracle 相关信息:

servicename:
  oracle:
  username:
  host:
  password: 
servicename2:
  oracle:
  username:
  host:
  password:

其中“servicename”、“servicename2”是微服务名称。

现在,我面临的问题是这样的:

datasourceDto = encryptionutils.getDbCredentials("servicename", "oracle", env.getProperty("env"));

问题在于,早期数据库相关代码是每个需要数据库连接的微服务的一部分,并且特定微服务的名称在这一行中分别被硬编码为“servicename”或“servicename2”以访问相应的数据库信息。因此,当我连接到特定微服务的数据库时,这工作正常。

现在,由于我将此代码移至通用数据库服务模块,因此“服务名称”不能再进行硬编码,因为此数据库服务也将被所有其他微服务使用。

如果我将其硬编码为一个服务名称,其他服务也将最终连接该服务的数据库,这在这里是不希望的。所以,我的问题是如何在该行中配置此“servicename”,以便当微服务“servicename”尝试访问数据库时,从 db Secrets yml 中获取“servicename”的相应数据库信息,并且当“servicename2” “微服务想要连接到数据库,它会获取“servicename2”的数据库信息。

java oracle spring-data
1个回答
0
投票

能不能不传递参数或者使用反射来区分调用的类和方法。查找表等...

© www.soinside.com 2019 - 2024. All rights reserved.