Динамически настраивать URL-адрес DataSourceBuilder при загрузке Spring - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть следующие свойства, определенные в application.properties файле.

sample.db.serverName=10.10.10.10
sample.db.serverPort=1234
sample.db.databaseName=sampleDb

Теперь я использую DataSourceBuilder, но мне нужно создать URL со всей доступной информацией, поскольку он имеет только параметр url.

Я не уверен, как прочитать свойства в POJO и получить дескриптор в классе DataSource

public DataSource dataSource()
{
   //handle for POJO
   //StringBuilder to build the url
   return DataSourceBuilder.create.url(str.toString()).build();
}

P.S .: Я ссылался на эту ссылку , но она отличается от моей проблемы.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Аннотируйте ваш метод с помощью @Bean и передайте ему свойства, используя @Value аннотация:

@Value("${sample.db.serverName}") private String serverName;
// .. repeat for other properties ...
@Bean public DataSource dataSource() {
    String url = // build URL from serverName field and other fields
    // create DataSource instance and return it
}

Вы также можете использовать аннотацию @Value с параметрами метода, а не только с полями - но тогда это начинает выглядеть сложным, если вы вызываете свой метод dataSource() из кода.

0 голосов
/ 15 ноября 2018

Вы можете создать класс свойств конфигурации (простой POJO):

@ConfigurationProperties(prefix = "sample.db")
public class DbProperties {
    private String serverName;
    private String serverPort;
    private String databaseName;

    // getters and setters
}

После этого вы можете указать Spring создать экземпляр этого класса и заполнить свойства из файла свойств:

@EnableConfigurationProperties(value = DbProperties.class)

И, наконец, вы можете автоматически связать их в метод, который создает источник данных:

@Configuration
@EnableConfigurationProperties(value = DbProperties.class)
public class DatasourceConfig {

    @Bean
    public DataSource dataSource(final DbProperties properties) {
        // do whatever you need
        return DataSourceBuilder.create.url(str.toString()).build();
    }
}
...