Загрузить файл внешних свойств с теми же ключами - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть два файла свойств в папке в файловой системе.Путь к этой папке передается с использованием системных свойств -D = путь / к / properties / папка

ex: java -jar -DpropDir = abc / def app.jar

Это файлы свойств,Обратите внимание, что оба файла имеют общий ключ, имя пользователя и пароль.

mysql.properties

url=jdbc:mysql://localhost:3306
username=root
password=pass

vertica.properties

dburl=jdbc:vertica://123.123.123:4321/abcd
username=abcd
password=pass123

Теперь я хочу получить доступ ко всем этим свойствамв соответствующих классах.MySqlProperties.java и VerticaProperties.java похожи на это.

@Component
public class VerticaProperties {

    @Value("${dburl}")
    private String dburl;
    @Value("${username}")
    private String username;
    @Value("${password}")
    private String password;

    public String getDbUrl() {
        return dburl;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

и аналогично MySqlProperties.java

@Component
public class MySqlProperties {

    @Value("${url}")
    private String url;
    @Value("${username}")
    private String username;
    @Value("${password}")
    private String password;

    public String getDbUrl() {
        return url;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

Но так как ключом является то же значение, оно переопределяется для имени пользователя и пароля.

Как получить доступ к mysql.properties в MySqlProperties.java и vertica.properties в классах VerticaProperties.java.

1 Ответ

0 голосов
/ 26 декабря 2018

Вы импортируете внешние свойства, используя @PropertySource

Учитывая, что расположение совместно используется как

-Dmysql.properties = file: /path-to-mysql.properties -Dvertica.properties = file:/path-to-vertica.properties

@Component
@PropertySource("${vertica.properties}")
public class VerticaProperties {
.....
}

@Component
@PropertySource("${mysql.properties}")
public class MySqlProperties {
....
}

или задано -Dmysql.properties = / path-to-mysql.properties -Dvertica.properties = / path-to-vertica.properties

@Component
    @PropertySource("file:${vertica.properties}")
    public class VerticaProperties {
    .....
    }

    @Component
    @PropertySource("file:${mysql.properties}")
    public class MySqlProperties {
    ....
    }

Кроме того, вы также можете использовать префикс с @ ConfigurationProperties вместе с @PropertySource.

Аннотация работает лучше всего, когда у нас есть иерархические свойства, которые имеют одинаковый префикс, поэтому мы также упоминаем префикс как часть аннотации.

Добавление префикса к ключам, таким как mysql.url,vertica.url в соответствующих файлах

@Component
@PropertySource("${vertica.properties}")
@ConfigurationProperties(prefix="vertica")
public class VerticaProperties {
.....
}

@Component
@PropertySource("${mysql.properties}")
@ConfigurationProperties(prefix="mysql")
public class MySqlProperties {
....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...